Qt Remote Objects
远程对象概念
Qt Remote Objects (QtRO) 是为 Qt 开发的进程间通信(IPC)模块。该模块扩展了 Qt 的现有功能,可轻松实现进程或计算机之间的信息交换。
Qt 实现这种信息交换的关键功能之一是区分对象的 API(由其属性、信号和插槽定义)和该 API 的实现。QtRO 的目的是满足预期的 API,即使真正的QObject 是在不同的进程中。在对象副本(QtRO 中的Replica)上调用的槽会被转发到真正的对象(QtRO 中的Source)上进行处理。每个副本都会接收源的更新,包括属性更改或发出的信号。
Replica是Source对象的轻量级代理,但 Replica 支持与 QObjects 相同的连接和行为,这使它与 Qt 提供的任何其他QObject 一样可用。在幕后,QtRO 会处理一切必要的工作,使 Replica 看起来像它的源对象。
请注意,远程对象(Remote Objects)的行为与传统的远程过程调用(RPC)实现不同:
- 在 RPC 中,客户端发出请求并等待响应。
- 在 RPC 中,服务器不会向客户端推送任何内容,除非是对请求的响应。
- 通常情况下,RPC 的设计使不同的客户端相互独立:例如,两个客户端可以向地图服务询问方向,但得到的结果却不同。
虽然可以在 QtRO 中实现这种 RPC 风格的行为,如没有属性的 Sources 和有返回值的槽,但 QtRO 隐藏了处理实际上是远程进行的这一事实。您可以让节点为您提供 Replica,而不是自己创建 Replica,也可以使用状态信号(isReplicaValid()) ,然后像与其他基于QObject 的类型一样与对象交互。
使用案例:GPS
考虑一个传感器,如全球定位系统(GPS)接收器。用 QtRO 术语来说
- 源程序将是直接与 GPS 硬件交互并获取当前位置的进程。
- 位置将作为QObject 属性公开;位置的定期更新将更新这些属性并发出属性更改信号。
- 副本将在其他进程中创建,并始终知道您的当前位置,但不需要任何逻辑来根据传感器数据计算位置。
- 连接到副本上的位置更改信号将如预期般工作:源发出的信号将触发每个副本上的信号发射。
使用案例:访问打印机
考虑一项可访问打印机的服务。用 QtRO 术语来说
- 源是直接控制打印机的进程。
- 墨水量和打印机状态将由QObject 属性监控。这些属性的更新将发出属性更改信号。
- 关键特性--能够打印某些内容--需要传递回打印机。顺便提一下,这与 Qt 槽机制一致,QtRO 将其用作Replicas在 Source 上进行调用的方式。实际上,属性和信号从源代码传递到副本;槽则从副本传递到源代码。
- 当打印请求被接受时,打印机状态将发生变化,从而触发 status 属性的变化。这将报告给所有副本。
使用模块
使用 Qt 模块需要直接或通过其他依赖关系与模块库链接。包括CMake和qmake 在内的多个构建工具都为此提供了专门支持。
使用 CMake 构建
使用find_package()
命令在Qt6
软件包中找到所需的模块组件:
find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
另请参阅使用 CMake 构建概述。
使用 qmake 构建
要配置使用 qmake 构建的模块,请在项目的 .pro 文件中添加模块作为QT
变量的值:
QT += remoteobjects
文章和指南
应用程序接口参考
许可证
Qt Remote Objects 可从Qt 公司获得商业许可证。此外,它还可以在GNU Lesser General Public License 第 3 版或GNU General Public License 第 2 版下使用。更多详情,请参阅Qt Licensing。
© 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.