本页内容

入门指南Qt Remote Objects

简介

Qt Remote Objects 模块提供了一种在进程和设备之间共享Qt API的便捷方式。要实现这一点,我们需要在进程和设备之间建立一条数据通道。要建立这条数据通道,首先需要一个QRemoteObjectNode 。

在 QtRO 中,节点是通信的端点。在远程对象网络中,每个参与者(无论是进程还是设备)都需要拥有自己的节点。QtRO 是一个点对点网络,相互连接的节点构成了网络中的链接。

节点本身并没有太大用处。但当您向节点添加“QObject ”类以进行共享时,其价值便显现出来。此时,任何对等节点都可以向主机节点(即共享该对象的节点)请求共享对象的副本或实例。

这与使用普通类实例(具有独立属性并能发出信号)不同,QtRO 会自动在共享对象的所有副本之间同步更改。除少数例外情况外,这些副本与原始对象具有完全相同的 Qt API,其使用方式应完全等同于直接使用原始对象。

在 QtRO 中,原始对象被称为“源”(Source)。它是一个完全实现的 C++ 类,包含提供所需功能所需的业务逻辑。该对象的副本被称为“副本”(Replicas)。 您无需为副本编写任何 C++ 代码;只需从节点请求一个实例即可。虽然您需要编写一些代码来使用副本(例如将信号连接到您自己的槽),但无需实现内部行为——源中已经为您完成了这些工作。

由于源节点可能位于不同的进程中,甚至位于不同的设备上,因此在 QtRO 中有几个因素需要您加以考虑,而这些因素在没有进程间通信(IPC)的开发中通常不会遇到。具体来说,如果该进程或设备不存在,会发生什么情况? 这就是 Replica API 中新增功能发挥作用的地方:

通过 QtRO 共享的对象使用节点之间的链接(通道)进行所有通信。若要共享一个 `QObject`,必须创建一个具有 URL 的主机节点,以便其他节点连接到该节点。 您也可以使用Registry来简化连接,但共享源的节点仍需是主机节点。每个共享对象都会被分配一个名称(QString ),用于在 QtRO 网络中识别它。

实现

为说明远程对象的使用,在源端,我们需要:

  1. 创建将被复制到其他节点的源对象,无论是否使用repc(Qt Remote Objects 编译器)。
  2. 可选地,创建注册表(Registry)。否则,使用直接连接。
  3. 创建一个主机节点,以便共享源对象。
  4. 调用节点的enableRemoting()函数来共享源对象。

在副本端,我们需要:

  1. 可选地,使用repc为您的项目生成一个Replica头。
  2. 创建将与源主机节点连接的节点。
  3. 调用节点的acquire()函数来创建一个指向副本的指针。

以下示例演示了由 repc 编译的静态对象和动态源对象。此外,它们还展示了节点间的直接连接以及通过注册表进行的连接。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.