我偶然发现了一个我现在无法以优雅的方式解决的问题。
情况:我有一个回调函数,从我的应用程序外部调用。回调函数必须更新一些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);
答案 0 :(得分:2)
QMetaObject::invokeMethod
通常是你应该在这种情况下使用的。确保:
object
是一个QObject子类,顶部是Q_OBJECT宏functionName
要么在插槽部分声明,要么具有Q_INVOKABLE宏