如何从一个 QNetworkAccessManager 发送回复?
Posted
技术标签:
【中文标题】如何从一个 QNetworkAccessManager 发送回复?【英文标题】:How to dispatch replies from one QNetworkAccessManager? 【发布时间】:2016-02-17 13:58:50 【问题描述】:Qt documentation says 表示每个应用程序将使用一个QNetworkAccessManager
:
一个 QNetworkAccessManager 应该足够整个 Qt 应用。
但是,我访问多个 Web 服务并且需要调用单独的函数来解析其中的每一个:
由于我只有 一个 QNetworkAccessManager::finished(QNetworkReply * reply)
信号,将回复发送到其单独的解析函数的最佳方式是什么?
当我创建请求时,我可以连接到每个QNetworkReply
对象的finished
信号:
QNetworkReply * QNetworkAccessManager::get(const QNetworkRequest & request)
但它是连接到只使用一次的信号的最佳方式(性能)吗?有更好的方法吗?
自己的相关问题:
-
Best way to share cookies within Qt application
What is the correct way to "stop / shutdown" a QNetworkAccessManager?
QNetworkAccessManager get/post from different thread possible?
【问题讨论】:
【参考方案1】:您可以使用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(...);
【讨论】:
原始对象可以实现一个接口(在你的情况下是句柄),然后即使 if 也可以去。 setOriginatingObject 的好主意以上是关于如何从一个 QNetworkAccessManager 发送回复?的主要内容,如果未能解决你的问题,请参考以下文章