c++ - Qt : Best approach to wait for a signal from a function

标签 c++ qt

我现在有这样的东西

void foo::replyFinished(QNetworkReply* rply)
{
     .....
     .....
}

void foo::ReceiveReport()
{
  //Communicate with http
   QUrl url(url_complete.c_str());
   QNetworkRequest request;
   request.setUrl(url);
   currentReply = networkManager->get(request);
}


void foo::mymethodA()  //Start from here
{
   ReceiveReport();
   -----------------> Wait();
   MoreStuff();
}

现在发生的是我调用 mymethodA。此方法称为 ReceiveReport。 接收报告有一个连接到 replyFinished() 的信号。现在我想要的是等到我收到来自网络的回复,这发生在调用 replyFinished 时。目前的问题是在触发 replyFinished() 方法之前调用了 MoreStuff() 方法。我的问题是如何让它等到我收到回复?所有这些都在同一个线程中运行

最佳答案

如果没有丑陋的 processEvent () hack,这将无法工作。您需要的是一个进行处理的插槽。 Qt 中的信号和槽仅在您留下一个方法并给 qt 时间来运行它的事件循环时才起作用。

另一种方法是使用不同的线程。

您在 qt 中没有 C# async 和 await,让那个范式去吧。

请再次阅读有关 Qt 事件循环的文档以获得更好的理解,然后强制自己进行基于事件的编程,因为这就是 qt 必须提供的以及它在 QApplication exec () 中运行时的工作方式

关于c++ - Qt : Best approach to wait for a signal from a function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890369/

相关文章:

android - 适用于 Android 的纯 C++ 应用程序及其性能

c++ - C++ 对象的 XML 表示

C++ 初学者输入错误数据类型时的无限循环并帮助评估我的代码

适用于 Linux 的 Qt 嵌入式。键盘布局切换

c++ - 如何在选中/取消选中时更改 QToolBar 上 QAction 的图标?

c++ - Qt QWebEngineView 不允许加载本地资源

c# - 无法处理 C# COM 对象

c++ - 错误 : ISO C++ forbids declaration of 'object' with no type

c++ - 删除 QWidget 周围的额外间距

c++ - gSoap 缺少 stdsoap2.cpp,未定义对 `soap_peek_element' 的引用