PySide6.QtRemoteObjects

详细描述

提供用于进程间通信的API。

远程对象概念

Qt Remote Objects (QtRO) 是一个为 Qt 开发的进程间通信 (IPC) 模块。该模块扩展了 Qt 的现有功能,以便轻松实现进程或计算机之间的信息交换。

Qt的一个关键特性,为了实现这种信息交换,是对象API(由其属性、信号和槽定义)与该API实现之间的区别。QtRO的目的是满足预期的API,即使真正的QObject在不同的进程中。在对象副本(QtRO中的Replica)上调用的槽会被转发到真实对象(QtRO中的Source)进行处理。每个Replica都会接收到Source的更新,无论是属性更改还是发出的信号。

一个ReplicaSource对象的轻量级代理,但Replica支持与QObjects相同的连接和行为,这使得它可以像Qt提供的任何其他QObject一样使用。在幕后,QtRO处理了所有必要的操作,使Replica看起来像其Source。

请注意,远程对象的行为与传统远程过程调用(RPC)实现不同,例如:

  • 在RPC中,客户端发出请求并等待响应。

  • 在RPC中,服务器不会向客户端推送任何内容,除非是对请求的响应。

  • 通常,RPC的设计使得不同的客户端彼此独立:例如,两个客户端可以向地图服务请求方向并获得不同的结果。

虽然在QtRO中可以实现这种RPC风格的行为,作为没有属性的Sources和具有返回值的槽,QtRO隐藏了处理实际上是远程的事实。你让一个节点给你Replica,而不是自己创建它,可能使用状态信号( isReplicaValid() ),但然后像与任何其他基于 QObject的类型一样与对象交互。

用例:GPS

考虑一个传感器,例如全球定位系统(GPS)接收器。在QtRO术语中:

  • Source 将是直接与 GPS 硬件交互并获取您当前位置的过程。

  • 位置将作为QObject属性暴露;位置的定期更新将更新这些属性并发出属性更改信号。

  • Replicas 将在其他进程中创建,并且始终知道您当前的位置,但不需要任何逻辑来从传感器数据计算位置。

  • 连接到Replica上的位置改变信号将按预期工作:从Source发出的信号将触发每个Replica上的信号发射。

用例:打印机访问

考虑一个提供打印机访问的服务。在QtRO术语中:

  • Source 将是直接控制打印机的进程。

  • 墨水量和打印机状态将由 QObject 属性监控。这些属性的更新将发出属性更改信号。

  • 关键特性——能够打印某些内容——需要传递回打印机。顺便说一下,这与Qt的槽机制一致,QtRO使用这种方式让Replicas对Source进行调用。实际上,属性和信号从Source传递到Replicas;槽从Replica传递到Source。

  • 当打印请求被接受时,打印机状态会发生变化,触发状态属性的变化。然后,这将报告给所有副本。

使用模块

要包含模块类的定义,请使用以下指令:

import PySide6.QtRemoteObjects

文章和指南

班级列表