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 模块需要将模块库链接到程序,可以直接链接或通过其他依赖项。包括 CMakeqmake在内的几个构建工具都有专门的对此的支持。

使用 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 3GNU 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. 在芬兰和/或其他国家/地区的商标。所有其他商标均归其所有者所有。