2

我在 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 ) );
    

    我找到了使用 URL 地址发布消息的 QNetworkRequest 类,但我使用的是在不同端口工作的 http 和 https,所以我还需要设置这个 ConnectionMode(http 或 https)。

    有没有办法在 QNetworkRequest 中设置 ConnectionMode?

  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 )
    

    发布消息(请求+数据)并获得答案(QIODevice * data)的新 Qt 5 等效项是什么?

4

1 回答 1

1

您可以在 QUrl() 中设置端口。类似的东西(非常简化):

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

对于 sslError:

您可以在 QNetworkReply 中找到信号。你可以做:

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

在您的插槽中:

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

免责声明:此代码只是一个示例,并不打算复制/粘贴到生产系统中。

于 2013-09-02T12:40:44.523 回答