【发布时间】:2010-12-30 09:44:08
【问题描述】:
我正在尝试使用 QMetaObject::invokeMethod 在 GUI 线程上运行一个方法,该方法返回 true。但是,如果我使用 Qt::QueuedConnection 我的方法永远不会被调用(即使 invokeMethod 返回 true)。
这是我正在使用的:
QMetaObject::invokeMethod(this, "draw_widgets", Qt::QueuedConnection)
我没有收到任何错误消息或任何东西... 如果我使用 Qt::AutoConnection 或 Qt::DirectConnection 该方法确实会被调用,但当然来自同一个线程。不是来自 GUI 线程,这是我需要的。
draw_widgets 是一个 void draw_widgets() 类型的公共插槽 我的类继承了 QObject 并使用了 Q_OBJECT 宏。
我将不胜感激任何帮助,或者如何检查为什么没有调用该方法。
谢谢。
【问题讨论】:
-
我有类似的情况:我有一个继承自 QObject 并使用
Q_OBJECT的类。这个类的实例是在主循环中创建的。然后,在主循环中执行同一类的方法时,我调用QMetaObject::invokeMethod(this, "hideListsSlot", Qt::QueuedConnection);,其中void hideListsSlot()是该类的公共槽。插槽永远不会被调用。
标签: c++ user-interface qt multithreading