【发布时间】:2014-11-11 22:55:20
【问题描述】:
我偶然发现了一个我现在无法以优雅的方式解决的问题。
情况:我有一个从我的应用程序外部调用的回调函数。回调函数必须更新一些 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);
【问题讨论】:
-
通常
QMetaObject::invokeMethod工作正常。它也不会说谎,如果您的调用中有错字,它将失败(因为它是在运行时评估的 - 没有编译器检查函数是否存在)并输出该消息。检查你的电话,它应该可以工作
标签: c++ multithreading qt signals qeventloop