我创建了一个QEventLoop对象,并尝试在启动它之前放置quit()消息,所以我的目的是输入并退出一个循环:
QEventLoop loop;
loop.connect(this, SIGNAL(sig()), SLOT(quit()));
emit sig();
loop.exec(); // can't get past this point但线在循环中,永不放弃.
我怎样才能达到预期的行为?
发布于 2016-03-02 12:32:22
孤立地说,这似乎没有多大意义,但是要回答您的问题,您可以连接Qt::QueuedConnection,然后在运行事件循环时接收到quit调用,然后循环将正确退出。
这是因为插槽是按照connect调用的顺序执行的,所以另一个也碰巧连接到sig()的插槽可以做它想做的任何事情,甚至启动一个自己的事件循环。但是,最后一个连接是您的,它对quit的排队调用将在最后发生,在排队调用quit和调用loop.exec之间没有其他事件循环操作。
记住,本地QEventLoops,就像调用QApplication::processEvents一样,是非常危险的。如果可以更改代码,请尝试设置一个statemachine来执行异步工作。
https://stackoverflow.com/questions/35746857
复制相似问题