2

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

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

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

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

4

0 回答 0