【问题标题】:QNetworkAccessManager: Associate response with requestQNetworkAccessManager:将响应与请求关联
【发布时间】:2015-11-26 16:48:48
【问题描述】:

我尝试对 REST 服务执行简单的 GET 操作,并想知道如何将请求识别/关联到我在 SLOT 函数中获得的响应。例如,我可能会向同一个经理发送多个请求,并希望传递一个 messageID 以便在我的 SLOT 函数中读取该 ID,从而将响应与负责的请求相关联。

任何想法如何做到这一点?

QNetworkAccessManager manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply)),
this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("http://qt-project.org")));

【问题讨论】:

标签: qt rest qt5 qnetworkaccessmanager


【解决方案1】:

简短回答:回复提供返回请求的函数:QNetworkReply::request()...

下次尝试先检查文档。

编辑:
如果你需要更多的数据,你有多种方法可以做到这一点。例如,您可以将数据作为动态属性添加到请求中(请参阅QObject::setProperty)或将QNetworkAccessManager::get 函数返回的QNetworkReply 与您需要的数据一起存储在QHash 中。

【讨论】:

  • 但我也可以将一些元数据传递给请求对象吗?当我发送多个相等的请求时,原始请求是不够的。
  • QNetworkRequest 不是 QObject,因此 setProperty 不可用。
  • @PredragManojlovic 我的错 - 我的意思是回复。修复了答案
【解决方案2】:

你可以使用 c++11 绑定:

QNetworkAccessManager manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply)), this, 
SLOT(replyFinished(QNetworkReply*)));
QNetworkRequest *request = new QNetworkRequest(QUrl("http://qt-project.org"));
QNetworkReply *reply = manager->get(request );
QObject::connect(reply, &QNetworkReply::finished, std::bind(&YOURCLASS::onGetFinished, this, reply, request));

void YOURCLASS::onGetFinished( QNetworkReply* reply, QNetworkRequest* request ) {}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-08
    • 2018-12-10
    • 1970-01-01
    • 2018-02-19
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    相关资源
    最近更新 更多