首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QNetworkAccessManager问题

QNetworkAccessManager问题
EN

Stack Overflow用户
提问于 2014-06-18 11:59:29
回答 1查看 396关注 0票数 1
代码语言:javascript
复制
QString My_class::My_Method()
{
    QNetworkAccessManager *manager= new QNetworkAccessManager(this);
    connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(ReplayFinished(QNetworkReply*)));
    manager->get(QNetworkRequest(QUrl(My_URL)));
    return str;
}

void My_class::ReplayFinished(QNetworkReply *replay)
{
    QString buffer;
    if(replay->isOpen())
    {
        buffer=replay->readAll();
//treatment on the buffer and the public Qstring 'str'(declared in My_class.h) is updated
    }
}

嗨,问题是在主调用My_method()时,QString str是空的,因为它是以这种方式返回的,而没有等待ReplayFinished更新它。有什么解决方案可以等到工作完成,这样我才能得到正确的信息,而不是跳过它并返回其他的东西。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-18 12:06:00

您可以使用事件循环等待应答完成,然后读取可用字节并返回字符串:

代码语言:javascript
复制
QString My_class::My_Method()
{

   QNetworkAccessManager manager;

   QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(My_URL)));

   QEventLoop loop;
   connect(reply, SIGNAL(finished()), &loop, SLOT(quit()));
   connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), &loop, SLOT(quit()));
   loop.exec();

   QByteArray bts = reply->readAll();
   QString str(bts);

   delete reply;

   return str;

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

https://stackoverflow.com/questions/24285021

复制
相关文章

相似问题

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