Qt Remote Objects 快速入门

介绍

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 (源) 端需要:

  1. 创建 对象会被复制到其它节点,采用或不用 repc ,Qt Remote Objects 编译器。
  2. 可选,创建 注册 。否则,使用直接连接。
  3. 创建主机节点,以便可以共享 Source (源) 对象。
  4. 调用节点的 enableRemoting() 函数以共享 Source (源) 对象。

在 Replica (复本) 侧,需要:

  1. 可选,使用 repc 以生成 复本 头为工程。
  2. 创建节点将连接 主机节点。
  3. 调用节点的 acquire() 函数创建复本指针。

以下范例阐明两者 repc 编译的静态对象和动态 Source (源) 对象。此外,它们还展示了直接连接及连接,使用 注册 在节点之间。