首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有可能从QRemoteObject动态复制槽中获得返回值?

是否有可能从QRemoteObject动态复制槽中获得返回值?
EN

Stack Overflow用户
提问于 2019-08-06 06:12:03
回答 1查看 462关注 0票数 4

我无法调用返回QRemoteObjectDynamicReplica值的时隙。

似乎副本上的InvokeMethod不支持返回值。我只成功地调用了空返回插槽,即使在本例中,在DirectConnection模式下,invokeMethod在主机插槽调用之前就完成了,因此似乎没有主机应答在等待中。

我有这样的代码,它在主机端工作得很好,但在复制端不工作。

代码语言:javascript
运行
复制
  bool success = QMetaObject::invokeMethod(_replica,"getName", Qt::DirectConnection,
      Q_RETURN_ARG(QString, retVal),
      Q_ARG(QString, "id")
   );

如果我完全理解REPC的主题(我还没有尝试过),那么调用返回值时隙似乎是可能的:用法是声明时隙,然后用括号包装所需的签名。返回值可以包含在声明中。如果跳过返回值,将在生成的文件中使用void。

REPC是做了某种魔术来允许这个特性,还是我错过了什么?

谢谢你帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-09 20:19:51

对于那些正在寻找答案的人,有一种方法:):

QRemoteObjectPendingCall

无文件证明的论点。

代码语言:javascript
运行
复制
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用户正在寻找它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57369887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档