Qt Remote Objects 模块提供了在进程和设备之间,共享 Qt API 的轻松方式。为使这能工作,要求数据通道 (在进程和设备之间)。要建立这种数据通道,首先需要 QRemoteObjectNode .
在 QtRO,节点是通信端点。在远程对象网络,每个参与者 (进程或设备) 都需要自己的节点。QtRO 是具有连接节点为网络链接的点对点网络。
节点自身并未提供更多用法。但它们带有值,当添加 QObject 类到节点为共享。那么,任何对等节点都可以请求共享对象的副本 (或实例) 从 主机节点 ,共享它的节点。
不像使用正常类实例 (具有独立特性和信号发出),QtRO 会跨所有副本自动同步改变共享对象。除少数例外外,这些副本拥有如原始对象的同等 Qt API,且意味着可以准确用作原始对象是可用的。
在 QtRO,原始对象的调用者是 源 。它是完全实现的 C++ 类,采用必要业务逻辑以提供要求功能。这种对象的副本称为 复本 。不需要为 Replica (复本) 编写任何 C++ 代码;取而代之,可从节点请求实例。虽然需要一些代码才能使用 Replica 复本 (譬如:把信号连接到自己的槽),但是不需要实现内部行为 – 这已经在源代码中做到了。
因为 Source (源) 可以在不同进程中 (或者甚至可以在不同设备中),所以采用 QtRO 需要考虑一些因素,通常不会遇到当开发时不用 IPC (进程间通信)。具体来说,会发生什么若进程 (或设备) 不存在?这是复本 API 的附带补充:
通过 QtRO 共享的对象,所有通信会使用节点之间的链接 (导管)。若想要共享 QObject ,必须创建 主机节点 采用 URL (统一资源定位符) 可以连接到其它节点。还可以使用 注册 促进连接,但节点共享 sources 仍需要是主机节点。各共享对象都会给出名称 ( QString ),用于在 QtRO 网络中标识它。
为阐明远程对象的使用,在 Source (源) 端需要:
在 Replica (复本) 侧,需要:
以下范例阐明两者 repc 编译的静态对象和动态 Source (源) 对象。此外,它们还展示了直接连接及连接,使用 注册 在节点之间。