首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同步QNetworkAccessManager?

如何同步QNetworkAccessManager?
EN

Stack Overflow用户
提问于 2013-08-29 20:54:53
回答 3查看 1.3K关注 0票数 0

我的deleteIdList变量来自replyFinished(QNetworkReply*)函数。但deleteIdList变量返回为空。但是,它必须返回任何内容..我想同步QNetworkAccessManager..

代码语言:javascript
复制
    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?

EN

回答 3

Stack Overflow用户

发布于 2014-12-01 21:24:37

我可能会迟到,但我认为这可以帮助其他面临这个问题的人。

代码语言:javascript
复制
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

票数 1
EN

Stack Overflow用户

发布于 2013-08-29 21:10:05

呃..。你干吗呢?您创建了一个QNetWorkManager,将完成的信号连接到replyFinished插槽,并期望在发送请求之前就得到来自replyFinished的结果?对不起,但从我在你的代码中看到的,我会说它是无法修复的。

foreach (QString delIdList, deleteIdList)必须在replyFinished插槽中,当deleteIdList以某种方式作为请求的结果时。和

代码语言:javascript
复制
    QUrl url(requestUrl);
    QNetworkRequest request;
    request.setUrl(url);
    manager->get(request);

必须在连接下面的循环之外。但当然,你的代码是如此的错误,我的“提示”只是粗略地猜测你可能打算做什么。

票数 0
EN

Stack Overflow用户

发布于 2013-08-29 21:45:44

这个问题有点难理解--但我有一些建议,那就是:永远不要使用QNetworkAccessManager的finished信号。而是连接到QNetworkReply的已完成插槽。

代码语言:javascript
复制
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()来接收指向回复的指针。通过这种方式,您可以“同步”并找出哪个回复属于哪个请求。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18511623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档