3

我偶然发现了一个我现在无法以优雅的方式解决的问题。情况:我有一个从我的应用程序外部调用的回调函数。回调函数必须更新一些 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);

4

1 回答 1

3

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

  • object是 QObject 子类,顶部有 Q_OBJECT 宏
  • functionName在插槽部分中声明或具有 Q_INVOKABLE 宏
于 2014-11-11T23:08:28.810 回答