【问题标题】:How to dispatch replies from one QNetworkAccessManager?如何从一个 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)

但它是连接到只使用一次的信号的最佳方式(性能)吗?有更好的方法吗?


自己的相关问题:

  1. Best way to share cookies within Qt application
  2. What is the correct way to "stop / shutdown" a QNetworkAccessManager?
  3. QNetworkAccessManager get/post from different thread possible?

【问题讨论】:

    标签: c++ qt qnetworkaccessmanager qnetworkreply


    【解决方案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 的好主意
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多