我正在从我的线程中调用以下内容:
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/