I am calling from my thread the following:
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)
);
but it just fails, no matter what I do. If I take out Q_RETURN_ARG(quint32, taskId), the method is invoked, but I need the taskId, which I cannot get. Any help is much appreciated.
I'm assuming you want to call a method of an object from non owner thread & wants to get the return value. In order to do that use "Qt::BlockingQueuedConnection" as a connection type.
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)
);
Incase your method returns non standard return type you have to register your type before calling QMetaObject::invokeMethod(...). Refer http://qt-project.org/doc/qt-5.0/qtcore/qmetatype.html#qRegisterMetaType.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With