QMenus通常是自己的线程吗?等待他们完成处理事件的正确方法是什么?

时间:2013-04-03 00:15:21

标签: c++ qt pyqt qthread qmenu

在调试器中,我可以看到我的QMenu对象与主gui线程不在同一个线程中。例如,QApplication.instance().thread() == 0xdeadbeef,但mymenu.thread() == 0xdeadbabe

1)这是预期的吗?顺便说一句,我的QMenus 不是原生菜单(我使用setNativeMenuBar(False)

2)我想阻止,直到菜单处理完所有事件。我尝试了QApplication.processEvents(),但这有点棘手,因为必须从相同的线程调用我想要等待的小部件(在我的例子中,菜单) 。我将自定义事件过滤器类与moveToThread()结合使用,以确保从运行QMenu的同一个线程调用processEvents(),但它似乎并不重要。

无论我尝试什么,我似乎无法阻止所有QMenu事件/动作信号处理的完成。我唯一的选择似乎是sleep()足够长,我知道处理已经完成。但这对我的用例来说并不是真的可以接受。

0 个答案:

没有答案