0

Qt 文档说QNetworkAccessManager每个应用程序使用一个:

一个 QNetworkAccessManager 对于整个 Qt 应用程序应该足够了。

但是,我访问多个 Web 服务,并且需要调用单独的函数来解析其中的每一个:

由于我只有一个 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)方法将原始对象的引用附加到请求中。

假设我们有两个对象发出网络请求。在这种情况下,您可以使用以下代码来区分回复。

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 回答