c++ - 如何从 QMetaObject::invokeMethod 获取返回值

标签 c++ qt

我正在从我的线程中调用以下内容:

QMetaObject::invokeMethod(pProcessor,
                          "doTask",
                          Qt::QueuedConnection,
                          Q_RETURN_ARG(quint32, taskId),
                          Q_ARG(quint64,   objId),
                          Q_ARG(quint8,    intId),
                          Q_ARG(QString,   name),
                          Q_ARG(QString,   comment)
                          );

但不管我做什么,它都会失败。如果我取出 Q_RETURN_ARG(quint32, taskId),则调用该方法,但我需要 taskId,但我无法获取。 非常感谢任何帮助。

最佳答案

我假设您想从非所有者线程调用对象的方法并希望获得返回值。为此,请使用“Qt::BlockingQueuedConnection”作为连接类型。

quint32 taskId; // Declare taskId.
qRegisterMetaType<quint32>("quint32");
QMetaObject::invokeMethod(pProcessor,
                      "doTask",
                      Qt::BlockingQueuedConnection,
                      Q_RETURN_ARG(quint32, taskId),
                      Q_ARG(quint64,   objId),
                      Q_ARG(quint8,    intId),
                      Q_ARG(QString,   name),
                      Q_ARG(QString,   comment)
                      );

如果您的方法返回非标准返回类型,您必须在调用 QMetaObject::invokeMethod(...) 之前注册您的类型。引用 http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#qRegisterMetaType .

关于c++ - 如何从 QMetaObject::invokeMethod 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725727/

相关文章:

c++ - 全局构造函数的调用顺序是什么

c++ - OpenGL-计算NDC中的位置可在着色器中使用,但不能在 'regular'程序中使用

python - time.sleep(secs) 可以暂停 QNetworkAccessManager 异步请求吗?

QToolButton autoRaise 不适用于 Mac OSX

c++ - 关闭按钮仅适用于 Qt 中的某些选项卡

C++ std::list<T>::iterator 迭代器是否有权访问 <T> 成员函数?

c++ - 如何创建一个可以使用 std::unique_ptr 作为模板参数正常工作的容器?

c++ - 如何确定普通话字符的 Levenshtein 距离?

c++ - 找不到 QtCreator 调试器

python - PyQt5 QWidget.setGeometry() 不适用于 QLabel