我的deleteIdList变量来自replyFinished(QNetworkReply*)函数。但deleteIdList变量返回为空。但是,它必须返回任何内容..我想同步QNetworkAccessManager..
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*)));
foreach (QString delIdList, deleteIdList) {
serviceUrl = "http://localhost:8080/limit_id="+delIdList+"&false";
requestUrl = QString("%1%2:%3%4").arg(scheme).arg(qstr).arg(QString::number(svcPort)).arg(serviceUrl);
QUrl url(requestUrl);
QNetworkRequest request;
request.setUrl(url);
manager->get(request);
}如何同步QNetworkAccessManager?
发布于 2014-12-01 21:24:37
我可能会迟到,但我认为这可以帮助其他面临这个问题的人。
QNetworkAccessManager *networkMgr = new QNetworkAccessManager(this);
QNetworkReply *reply = networkMgr->get( QNetworkRequest( QUrl( "http://www.google.com" ) ) );
QEventLoop loop;
QObject::connect(reply, SIGNAL(readyRead()), &loop, SLOT(quit()));
// Execute the event loop here, now we will wait here until readyRead() signal is emitted
// which in turn will trigger event loop quit.
loop.exec();
// Lets print the HTTP GET response.
qDebug( reply->readAll());Source : developer.nokia.com
发布于 2013-08-29 21:10:05
呃..。你干吗呢?您创建了一个QNetWorkManager,将完成的信号连接到replyFinished插槽,并期望在发送请求之前就得到来自replyFinished的结果?对不起,但从我在你的代码中看到的,我会说它是无法修复的。
foreach (QString delIdList, deleteIdList)必须在replyFinished插槽中,当deleteIdList以某种方式作为请求的结果时。和
QUrl url(requestUrl);
QNetworkRequest request;
request.setUrl(url);
manager->get(request);必须在连接下面的循环之外。但当然,你的代码是如此的错误,我的“提示”只是粗略地猜测你可能打算做什么。
发布于 2013-08-29 21:45:44
这个问题有点难理解--但我有一些建议,那就是:永远不要使用QNetworkAccessManager的finished信号。而是连接到QNetworkReply的已完成插槽。
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
foreach (QString delIdList, deleteIdList) {
serviceUrl = "http://localhost:8080/limit_id="+delIdList+"&false";
requestUrl = QString("%1%2:%3%4").arg(scheme).arg(qstr).arg(QString::number(svcPort)).arg(serviceUrl);
QUrl url(requestUrl);
QNetworkRequest request;
request.setUrl(url);
QNetworkReply *reply = manager->get(request);
connect(reply,SIGNAL(finished()),this,SLOT(replyFinished()));
}然后,在replyFinished插槽中,您可以调用sender()来接收指向回复的指针。通过这种方式,您可以“同步”并找出哪个回复属于哪个请求。
https://stackoverflow.com/questions/18511623
复制相似问题