Qt从其他线程添加对事件循环的函数调用

时间:2014-11-11 22:55:21

标签: c++ multithreading qt signals qeventloop

我偶然发现了一个我现在无法以优雅的方式解决的问题。 情况:我有一个回调函数,从我的应用程序外部调用。回调函数必须更新一些gui对象..由于我不能从另一个线程中调用(例如)repaint(),我必须找到一些方法来向主事件循环添加一个函数调用,这样任务在某个时间执行。

一种可能的方法是使用它:

QMetaObject::invokeMethod(object, "functionName", Qt::QueuedConnection, Q_ARG(float, value)); 

然而,这只是给了我no such Method "Object::functionName"的回复。 (这显然是个谎言!)

我还读到了通过将连接类型设置为Qt::QueuedConnection来将信号连接到将从事件循环调用的插槽。但是,使用QOjbect.:connect()不会起作用,因为我不知道信号需要得到什么对象。好的就像是

QObject::emit(object, SIGNAL(function(flaot)), arg);

1 个答案:

答案 0 :(得分:2)

QMetaObject::invokeMethod通常是你应该在这种情况下使用的。确保:

  • object是一个QObject子类,顶部是Q_OBJECT宏
  • functionName要么在插槽部分声明,要么具有Q_INVOKABLE宏