是否可以从 QRemoteObject 动态副本插槽中获取 return 值?
Is it possible to get a return value from a QRemoteObject Dynamic Replica slot?
我无法在 QRemoteObjectDynamicReplica 上调用插槽 returning 值。
Replica 上的 InvokeMethod 似乎不支持 return 值。
我只成功调用了 void returning 插槽,即使在这种情况下,在 DirectConnection 模式下,invokeMethod 在主机插槽调用之前完成,因此似乎没有主机应答正在等待。
我有这样的代码,它在主机端运行良好,但在副本端运行不佳。
bool success = QMetaObject::invokeMethod(_replica,"getName", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "id")
);
如果我理解REPC的题目(我还没试过),似乎可以调用returning value slots:
用法是声明 SLOT,然后用括号括起来所需的签名。 return 值可以包含在声明中。如果跳过 return 值,将在生成的文件中使用 void。
REPC 是否做了某种魔法来实现此功能,还是我错过了什么?
感谢您的帮助。
对于那些正在寻找答案的人,有一个方法:) :
QRemoteObjectPendingCall
未记录的参数。
bool success = QMetaObject::invokeMethod(_replica,"getName",Qt::DirectConnection,
Q_RETURN_ARG(QRemoteObjectPendingCall, call),
Q_ARG(QString, "id")
);
auto e = call.error();// , QRemoteObjectPendingCall::InvalidMessage);
call.waitForFinished();
//QVERIFY(call.isFinished());
qDebug() << QMetaType::typeName(call.returnValue().type());
QString retVal = call.returnValue().toString();
这与可用于 REPC 副本的未来对象完全相同(除了未模板化)
没有文档,但有一些例子:
Qt Remote Objects integration tests
遗憾的是,目前 (5.13.0) 无法在 QML (QTBUG-77178) 中获得待处理回复,但 Qt 人们正在寻找它。
我无法在 QRemoteObjectDynamicReplica 上调用插槽 returning 值。
Replica 上的 InvokeMethod 似乎不支持 return 值。 我只成功调用了 void returning 插槽,即使在这种情况下,在 DirectConnection 模式下,invokeMethod 在主机插槽调用之前完成,因此似乎没有主机应答正在等待。
我有这样的代码,它在主机端运行良好,但在副本端运行不佳。
bool success = QMetaObject::invokeMethod(_replica,"getName", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "id")
);
如果我理解REPC的题目(我还没试过),似乎可以调用returning value slots: 用法是声明 SLOT,然后用括号括起来所需的签名。 return 值可以包含在声明中。如果跳过 return 值,将在生成的文件中使用 void。
REPC 是否做了某种魔法来实现此功能,还是我错过了什么?
感谢您的帮助。
对于那些正在寻找答案的人,有一个方法:) :
QRemoteObjectPendingCall
未记录的参数。
bool success = QMetaObject::invokeMethod(_replica,"getName",Qt::DirectConnection,
Q_RETURN_ARG(QRemoteObjectPendingCall, call),
Q_ARG(QString, "id")
);
auto e = call.error();// , QRemoteObjectPendingCall::InvalidMessage);
call.waitForFinished();
//QVERIFY(call.isFinished());
qDebug() << QMetaType::typeName(call.returnValue().type());
QString retVal = call.returnValue().toString();
这与可用于 REPC 副本的未来对象完全相同(除了未模板化) 没有文档,但有一些例子: Qt Remote Objects integration tests
遗憾的是,目前 (5.13.0) 无法在 QML (QTBUG-77178) 中获得待处理回复,但 Qt 人们正在寻找它。