Qt远程对象
远程对象概念
Qt远程对象(QtRO)是为Qt开发的进程间通信(IPC)模块。此模块扩展了Qt现有的功能,以便能够轻松地在进程或计算机之间交换信息。
Qt的关键特性之一,用于实现这种信息交换,是区分一个对象的API(由其属性、信号和槽定义)及其API的实现。QtRO的目的是满足预期的API,即使真正的QObject在另一个进程中。在对象的副本(QtRO中的副本)上调用槽将转发到真正的对象(QtRO中的源)进行处理。每个副本都会接收到源的更新,不管是属性更改还是发出的信号。
副本是源对象的轻量级代理,但它支持与QObjects相同的连接和行为,这使得它可以像Qt提供的任何其他QObject一样使用。幕后,QtRO处理了副本看起来像其源所需的一切。
请注意,远程对象的行为与传统远程过程调用(RPC)实现不同,例如
- 在RPC中,客户端发起请求并等待响应。
- 在RPC中,除非响应请求,否则服务器不会向客户端推任何东西。
- RPC的设计常常是不同的客户端之间相互独立:例如,两个客户端可以向地图服务请求路线并得到不同的结果。
虽然可以在QtRO中实现这种RPC风格的行为,选择作为没有属性并提供返回值的源,QtRO隐藏了处理实际上是在远程的事实。您可以让节点给您副本而不是自己创建它,可能使用状态信号(isReplicaValid()),但然后您将像与其他QObject类型一样与对象交互。
使用场景:GPS
考虑一个如全球定位系统(GPS)接收器的传感器。在QtRO术语中
- 源会是直接与GPS硬件交互并推导出您当前位置的进程。
- 位置会以QObject属性的形式公开;位置更新的定期更新将更新这些属性并发出属性更改信号。
- 副本会在其他进程中创建,并始终知道您的当前位置,但不需要从传感器数据中计算位置的任何逻辑。
- 在副本上连接位置更改信号将按预期工作:从源发出的信号会触发每个副本的信号发射。
使用场景:打印机访问
考虑一个提供打印机访问服务的程序。在 QtRO 术语中
- 源是控制打印机的进程。
- 油墨水平和打印机状态可以通过 QObject 属性进行监控。属性更新会触发属性更改信号。
- 关键功能——打印东西——需要传递回打印机。顺便提一下,这与 Qt 中的槽机制相一致,QtRO 使用它作为复制品发起源调用的一种方式。实际上,属性和信号从源到复制品传递;槽从复制品到源。
- 当接受打印请求时,打印机状态会改变,触发状态属性的更改。然后将此信息告知所有复制品。
使用模块
使用 Qt 模块需要将模块库链接到程序,可以直接链接或通过其他依赖项。包括 CMake 和 qmake在内的几个构建工具都有专门的对此的支持。
使用 CMake 构建
使用 find_package()
命令在 Qt6
包中查找所需的模块组件。
find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
请参阅使用 CMake 构建概览。
使用 qmake 构建
要配置模块以使用 qmake 构建,请将模块添加到项目 .pro 文件中 QT
变量的值。
QT += remoteobjects
文章和指南
API 参考资料a class="plink" href="#api-reference" title="直接链接到此标题">
许可协议
Qt 远程对象可以在 The Qt Company 的商业许可下获得。此外,它也可以获得根据 GNU Lesser General Public License, version 3 或 GNU General Public License, version 2 的高级行政许可。有关更多信息,请参阅Qt 许可协议。
© 2024 The Qt Company Ltd。此处包含的文档贡献的著作权归其所有者所有。提供于此的文档根据 Free Software Foundation 发布的 GNU Free Documentation License version 1.3 的条款进行许可。Qt 和相应的标志是 The Qt Company Ltd. 在芬兰和/或其他国家/地区的商标。所有其他商标均归其所有者所有。