Перенос класса QHttp с Qt 4 на Qt 5

У меня есть приложение, созданное в Qt 4, которое использует класс QHttp. Новый Qt 5 имеет почти такой же функционал в классе QNetworkAccessManager, но мне нужна пара настроек:

  1. Мой кусок кода:

    http=new QHttp ( this );
    if ( config->brokerurl.indexOf ( "https://" ) ==0 )
        neworkAccess->
        http->setHost ( lurl.host(),QHttp::ConnectionModeHttps,
                        lurl.port ( 443 ) );
    else
        http->setHost ( lurl.host(),QHttp::ConnectionModeHttp,
                        lurl.port ( 80 ) );
    

    Я нашел класс QNetworkRequest, который использует URL-адрес для отправки сообщения, но я использую http и https, которые работают на разных портах, поэтому мне нужно также установить этот ConnectionMode (http или https).

    Есть ли способ также установить ConnectionMode в QNetworkRequest?

  2. У меня есть этот кусок кода:

    http->post ( lurl.path(),req.toUtf8(),&httpSessionAnswer );
    

    Это в Qt 4 имеет подпись:

    int post ( const QString & path, const QByteArray & data, QIODevice * to = 0 )<br><br>
    

    В Qt 5 у нас есть:

    QNetworkReply * post ( const QNetworkRequest & request, QIODevice * data )
    
    QNetworkReply * post ( const QNetworkRequest & request, const QByteArray & data )
    

    Каков новый эквивалент Qt 5 для отправки сообщения (запрос + данные) и получения ответа (QIODevice * data)?


person Lucian    schedule 02.09.2013    source источник


Ответы (1)


Вы можете установить порт в QUrl(). Что-то вроде (крайне упрощенно):

QNetworkAcessManager http;
QUrl url;
url.setHost("xxx.xxx.xxx.xxx");
url.setPort(xxxx);
QNetworkRequest req(url);
http.post(req,....);

Для sslErrors:

Вы найдете сигнал в QNetworkReply. Ты можешь сделать:

connect(&http,SIGNAL(finished(QNetworkReply *)),
this,SLOT(finishedSlt(QNetworkReply *)));

В вашем слоте:

finishedSlt(QNetworkReply *reply){
    connect(reply,SIGNAL(sslErrors(const QList<QSslError> &)),
    SLOT(sslErrorsSlt(QList<QSslError> &)));
 }

Отказ от ответственности: этот код является только примером и не предназначен для копирования/вставки в производственную систему.

person Greenflow    schedule 02.09.2013