是否可以从 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 人们正在寻找它。