我无法调用返回QRemoteObjectDynamicReplica值的时隙。
似乎副本上的InvokeMethod不支持返回值。我只成功地调用了空返回插槽,即使在本例中,在DirectConnection模式下,invokeMethod在主机插槽调用之前就完成了,因此似乎没有主机应答在等待中。
我有这样的代码,它在主机端工作得很好,但在复制端不工作。
bool success = QMetaObject::invokeMethod(_replica,"getName", Qt::DirectConnection,
Q_RETURN_ARG(QString, retVal),
Q_ARG(QString, "id")
);如果我完全理解REPC的主题(我还没有尝试过),那么调用返回值时隙似乎是可能的:用法是声明时隙,然后用括号包装所需的签名。返回值可以包含在声明中。如果跳过返回值,将在生成的文件中使用void。
REPC是做了某种魔术来允许这个特性,还是我错过了什么?
谢谢你帮忙。
发布于 2019-08-09 20:19:51
对于那些正在寻找答案的人,有一种方法:):
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远程对象集成测试中有一些例子
遗憾的是,目前(5.13.0)无法在QML (QTBUG-77178)中获得待定答复,但Qt用户正在寻找它。
https://stackoverflow.com/questions/57369887
复制相似问题