首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在exec()之前将before ()发送到QEventLoop

在exec()之前将before ()发送到QEventLoop
EN

Stack Overflow用户
提问于 2016-03-02 12:10:08
回答 1查看 2.5K关注 0票数 1

我创建了一个QEventLoop对象,并尝试在启动它之前放置quit()消息,所以我的目的是输入并退出一个循环:

代码语言:javascript
复制
QEventLoop loop;
loop.connect(this, SIGNAL(sig()), SLOT(quit()));
emit sig();
loop.exec(); // can't get past this point

但线在循环中,永不放弃.

我怎样才能达到预期的行为?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-02 12:32:22

孤立地说,这似乎没有多大意义,但是要回答您的问题,您可以连接Qt::QueuedConnection,然后在运行事件循环时接收到quit调用,然后循环将正确退出。

这是因为插槽是按照connect调用的顺序执行的,所以另一个也碰巧连接到sig()的插槽可以做它想做的任何事情,甚至启动一个自己的事件循环。但是,最后一个连接是您的,它对quit的排队调用将在最后发生,在排队调用quit和调用loop.exec之间没有其他事件循环操作。

记住,本地QEventLoops,就像调用QApplication::processEvents一样,是非常危险的。如果可以更改代码,请尝试设置一个statemachine来执行异步工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35746857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档