我创建了一个QEventLoop
对象并在启动之前尝试发出quit()
消息,所以我打算进入并退出循环:
QEventLoop loop;
loop.connect(this, SIGNAL(sig()), SLOT(quit()));
emit sig();
loop.exec(); // can't get past this point
但是线程在循环中循环并且永不退出...
如何实现预期的行为?
答案 0 :(得分:3)
这种孤立似乎并没有多大意义,但为了回答您的问题,您可以与Qt::QueuedConnection
联系,然后在运行时收到quit
来电事件循环然后循环将正确退出。
这是因为插槽按照connect
调用的顺序执行,所以另一个恰好连接到sig()
的插槽可以做任何想做的事情,甚至可以启动自己的事件循环。但是,最后一次连接是你的,并且它排队的quit
调用最后会发生,排队的quit
调用和loop.exec
调用之间没有其他事件循环操作。
请记住,本地QEventLoops
就像调用QApplication::processEvents
一样非常危险。如果您可以更改代码,请尝试设置状态机以执行异步工作。