0

Qt のドキュメントではQNetworkAccessManager、アプリケーションごとに1 つ使用されると記載されています。

Qt アプリケーション全体に対して、1 つの QNetworkAccessManager で十分です。

ただし、複数の Web サービスにアクセスし、それぞれを解析するために個別の関数を呼び出す必要があります。

シグナルが1 つ しかないのでQNetworkAccessManager::finished(QNetworkReply * reply)、応答を個々の解析関数にディスパッチする最良の方法は何ですか?

リクエストを作成すると、各オブジェクトのfinishedシグナルに接続できます。QNetworkReply

QNetworkReply * QNetworkAccessManager::get(const QNetworkRequest & request)

しかし、一度しか使用されない信号 (パフォーマンス) に接続するための最良の方法はありますか? より良い方法はありますか?


関連する独自の質問:

  1. Qt アプリケーション内で Cookie を共有する最良の方法
  2. QNetworkAccessManager を「停止/シャットダウン」する正しい方法は何ですか?
  3. QNetworkAccessManager は別のスレッドから取得/投稿できますか?
4

1 に答える 1

3

メソッドを使用QNetworkRequest::setOriginatingObject(QObject * object)して、元のオブジェクトの参照をリクエストに添付できます。

ネットワーク要求を発行する 2 つのオブジェクトがあるとします。この場合、次のコードを使用して、返信を互いに区別できます。

QNetworkRequest *req1 = new QNetworkRequest();
req1->setOriginatingObject(sender1);
networkAccessManager->get(req1);

QNetworkRequest *req2 = new QNetworkRequest();
req2->setOriginatingObject(sender2);
networkAccessManager->get(req2);

そしてあなたのスロットで:

if(reply->request().originatingObject() == sender1){
     sender1->handle(...);
}

if(reply->request().originatingObject() == sender2){
     sender2->handle(...);
}
于 2016-02-17T14:28:30.900 に答える