我现在有这样的东西
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/