【发布时间】:2018-09-06 09:45:03
【问题描述】:
我有一个菜单屏幕,必须在登录屏幕关闭之前更新。 代码类似于下面的代码;
emit updateMainMenuAccordingToUserRights;
QCoreApplication::processEvents();
emit jumpMainMenu();
问题是“我如何确定所有事件都已处理?”。因为由 updateMainMenuAccordingToUserRights 信号触发的一些槽将新事件添加到事件循环以更新视图组件。在跳转主菜单之前,我必须确保它已经更新。我搜索了一下,发现 QCoreApplication::processEvent 只处理循环一次。好的,这就是上面代码不起作用的原因。即使我尝试了一些 QEventLoop 方法,但无法解决这个问题。
感谢您的建议。
【问题讨论】:
-
您需要在主菜单中添加一个信号,一旦更新完成就会触发一个槽。在此插槽中,您发出函数调用
jumpMainMenu。 -
QEventLoop::WaitForMoreEventsflag你试过了吗。 -
但就我而言,主菜单由小插件组成。主菜单不仅仅是一个对象。它正在被应用程序的一小部分更改(每个插件中都有一个用于 updateMainMenuAccordingToUserRights 的插槽)。所以,所有这些插槽都应该被执行。甚至这些插槽也可以自己添加新事件/发出信号。
-
@MohammadKanan 是的,我已经尝试过了。
-
必须强制事件循环意味着您可能正在做一些不推荐的事情,并且可以以更好的方式完成。我已经广泛使用 Qt 10 年了,我用它做了一些疯狂的复杂的事情,而且我从来不需要强制事件处理,一次也没有。
标签: c++ qt signals-slots qeventloop qcoreapplication