Qt直接连接

时间:2010-06-13 10:24:23

标签: qt qt4

我在与主线程不同的线程中创建了Qt树控件(及其节点)。在主线程中,我想显示所单击节点的上下文菜单,因此我将菜单中的操作与主线程中的相应插槽连接起来。 connect函数返回true,但从不执行slot。如果我在连接函数中明确说这是Qt :: DirectConnection,那么一切正常。这是为什么?

我在主线程中创建了我的树,一切都运行正常,而不必说这是Qt :: DirectConnection。

1 个答案:

答案 0 :(得分:4)

请参阅文档here

如果信号是从与接收器插槽相同的线程发送的,则默认连接类型Qt :: AutoConnection与Qt :: DirectConnection相同,否则行为与Qt :: QueuedConnection相同。

如果在主线程中创建窗口小部件,则基本上会获得与显式指定Qt :: DirectConnection时相同的行为。

Qt :: QueuedConnection的行为是在线程事件循环重新获得控制权时调用插槽。

要解决您的问题,请确保在每个可能正在接收信号的线程中都有一个事件循环,除非您手动指定Qt :: DirectConnection(我认为这意味着将从与该线程相同的线程调用该槽)信号发射器 - 基本上是正常函数调用的等效物。)