我遇到了一个问题,目前找不到一种优雅的解决方式。
情况是这样的:我有一个回调函数,它从我的应用程序外部被调用。回调函数必须更新一些GUI对象。由于我不能从另一个线程中调用(例如)
一种可能的方法是使用以下内容:
然而,这只是让我收到了“没有这样的方法”Object::functionName”的响应。(显然是假的!)
我还阅读过有关将信号连接到插槽并将连接类型设置为Qt::QueuedConnection以从事件循环调用插槽的内容。但是,使用QOjbect.connect()不起作用,因为我不知道信号需要获取的对象。好的方法应该是:
QObject.emit(object, SIGNAL(function(flaot)), arg);
repaint()
,所以我必须找到一种方法将函数调用添加到主事件循环中,以便任务在某个时间得到执行。一种可能的方法是使用以下内容:
QMetaObject::invokeMethod(object, "functionName", Qt::QueuedConnection, Q_ARG(float, value));
然而,这只是让我收到了“没有这样的方法”Object::functionName”的响应。(显然是假的!)
我还阅读过有关将信号连接到插槽并将连接类型设置为Qt::QueuedConnection以从事件循环调用插槽的内容。但是,使用QOjbect.connect()不起作用,因为我不知道信号需要获取的对象。好的方法应该是:
QObject.emit(object, SIGNAL(function(flaot)), arg);
QMetaObject::invokeMethod
运行良好。它也不会说谎,如果您在调用中有拼写错误,它将失败(因为它在运行时被评估 - 没有编译器检查函数是否存在),并输出该消息。检查您的调用,它应该可以工作。 - Zaiborg