我目前有类似的东西
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()方法。我的问题是如何让它等到我收到回复?所有这些都在同一个线程中运行
答案 0 :(得分:0)
如果没有丑陋的processEvent()hack,这是行不通的。你需要的是一个进行处理的插槽。 Qt中的信号和插槽只有在你离开方法并给qt时间运行它的事件循环时才有效。
另一种方法是使用不同的线程。
你没有C#异步并等待qt,让那个范例去。
请再次阅读有关Qt事件循环的文档以获得更好的理解,然后强迫自己进行基于事件的编程,因为这是qt必须提供的以及它在QApplication exec()中运行时的工作原理< / p>