Dae*_*aes 5 qt qt-slot qtremoteobjects
我无法调用返回 QRemoteObjectDynamicReplica 上的值的插槽。
Replica 上的 InvokeMethod 似乎不支持返回值。我仅成功调用 void 返回插槽,即使在这种情况下,在 DirectConnection 模式下,invokeMethod 在主机插槽调用之前完成,因此似乎没有主机答案在等待。
我有这样的代码,它在主机端完美运行,但在副本端却不起作用。
bool success = QMetaObject::invokeMethod(_replica,"getName", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "id")
);
Run Code Online (Sandbox Code Playgroud)
如果我很好地理解 REPC 的主题(我还没有尝试过),似乎调用返回值槽是可能的:用法是 声明 SLOT,后跟用括号括起来的所需签名。返回值可以包含在声明中。如果跳过返回值,则生成的文件中将使用 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();
Run Code Online (Sandbox Code Playgroud)
这与可用于 REPC 副本的未来对象完全相同(除非不是模板化的),没有文档,但有一些示例: Qt 远程对象集成测试
遗憾的是,目前(5.13.0)无法在 QML(QTBUG-77178)中获得待处理的回复,但 Qt 人们正在寻找它。
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |