QNetworkAccessManager:将响应与请求

时间:2015-11-26 16:48:48

标签: qt rest qt5 qnetworkaccessmanager

我尝试对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")));

2 个答案:

答案 0 :(得分:2)

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

下次尝试检查文档。

修改
如果您需要更多数据,您可以采用各种方式。例如,您可以将数据作为动态属性添加到请求中(请参阅QObject::setProperty),或将QNetworkReply函数返回的QNetworkAccessManager::get存储在QHash中,并附上您需要的数据

答案 1 :(得分:1)

你可以使用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 ) {}