0

My deleteIdList variable is coming from replyFinished(QNetworkReply*) function. But deleteIdList variable returning empty. However, it have to return anything..I want to synchronize 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);

  }

How to synchronize QNetworkAccessManager ?

4

3 回答 3

1

I might be late, but I think it could help others facing this issue.

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

于 2014-12-01T13:24:37.473 回答
0

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

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

    QUrl url(requestUrl);
    QNetworkRequest request;
    request.setUrl(url);
    manager->get(request);

必须在您的连接下方的循环之外。但是,当然,您的代码非常错误,以至于我的“提示”只是对您可能打算做什么的粗略猜测。

于 2013-08-29T13:10:04.567 回答
0

理解这个问题有点困难——但我有一些建议,那就是:永远不要使用 QNetworkAccessManager 的完成信号。而是连接到 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() 来接收指向回复的指针。通过这种方式,您可以“同步”并找出哪个回复属于哪个请求。

于 2013-08-29T13:45:44.463 回答