2

QHttp クラスを使用する Qt 4 で作成されたアプリケーションがあります。新しい 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 )
    

    メッセージ (リクエスト + データ) を投稿し、回答 ( ) を取得するための新しい Qt 5 の同等物は何QIODevice * dataですか?

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 に答える