首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QNetworkReply等待完成

QNetworkReply等待完成
EN

Stack Overflow用户
提问于 2011-03-30 12:11:31
回答 3查看 29.9K关注 0票数 17

我使用的是QT4.6.3和以下不工作的代码

代码语言:javascript
复制
QStringList userInfo;
QNetworkRequest netRequest(QUrl("http://api.stackoverflow.com/1.1/users/587532"));
QNetworkReply *netReply = netman->get(netRequest);

// from here onwards not working
netReply->waitForReadyRead(-1);
if (netReply->isFinished()==true)
{userInfo << do sth to reply;}
return userInfo;

当这个函数返回一个空的QStringList时,应用程序就会崩溃。如何等待请求完成,然后在一个函数中处理应答

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-31 07:20:43

您可以使用事件循环:

代码语言:javascript
复制
QEventLoop loop;
connect(netReply, SIGNAL(finished()), &loop, SLOT(quit()));
loop.exec();
// here you have done.

另外,您应该考虑添加一些比网络超时更短的时间(20?)。即使发生错误,我也不确定是否调用了finished。所以这是有可能的,你也有连接错误信号。

票数 44
EN

Stack Overflow用户

发布于 2011-03-30 12:45:22

首先,我建议您从Qt文档参考中阅读相关文档,您可以在这里找到:http://doc.qt.nokia.com/latest/classes.html

看一下您的代码示例,您似乎已经和QNetworkRequestQNetworkReply一起拥有了一个QNetworkAccessManager。您需要的是连接一个插槽到finished(QNetworkReply *)信号。每当挂起的网络应答完成时,就会发出此信号。

代码语言:javascript
复制
QNetworkAccessManager *manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)),
        this, SLOT(replyFinished(QNetworkReply*)));

manager->get(QNetworkRequest(QUrl("http://api.stackoverflow.com")));

现在,在您的插槽中,您可以读取响应请求而发送的数据。类似于:

代码语言:javascript
复制
void MyClass::MySlot(QNetworkReply *data) {
    QFile file("dataFromRequest");
    if (!file.open(QIODevice::WriteOnly))
        return;
    file.write(data->readAll());
    file.close();
}

编辑:

若要同步等待信号,请使用QEventLoop。这里有个例子

http://wiki.forum.nokia.com/index.php/How_to_wait_synchronously_for_a_Signal_in_Qt

票数 5
EN

Stack Overflow用户

发布于 2021-05-22 05:04:09

这里的答复都使用旧的语法,不适用于最新的QT。

若要等待网络请求完成:

代码语言:javascript
复制
QEventLoop loop;
connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
loop.exec();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5486090

复制
相关文章

相似问题

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