开始使用Qt Remote Objects

简介

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

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

节点本身用处不大。但当您将QObject 类添加到节点中进行共享时,它们的价值就体现出来了。然后,任何对等节点都可以从共享对象的宿主节点请求共享对象的副本或实例。

与使用普通的类实例(具有独立的属性和信号发射)不同,QtRO 会自动同步共享对象在其所有副本中的变化。除少数例外情况外,这些副本与原始对象具有完全相同的 Qt API,其使用方式与原始对象完全相同。

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

由于源代码可能在不同的进程中,甚至在不同的设备上,因此 QtRO 中有一些因素需要考虑,而这些因素在没有进程间通信(IPC)的情况下开发时通常不会遇到。具体来说,如果进程或设备不在那里会发生什么?这就是复制 API 新增功能的作用所在:

通过 QtRO 共享的对象使用节点之间的链接(管道)进行所有通信。如果要共享QObject ,必须创建一个主机节点,并提供一个其他节点可以连接的 URL。您也可以使用注册表来促进连接,但共享的节点仍需是主机节点。每个共享对象都有一个名称(QString ),用于在 QtRO 网络中识别它。

实现

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

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

在副本方面,我们需要

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

以下示例展示了repc 编译的静态对象和动态源对象。此外,这些示例还显示了直接连接以及使用节点间注册表的连接。

© 2025 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.