Qt远程对象入门
简介
Qt远程对象模块提供了一种在进程和设备之间共享Qt API的简便方法。为了使这成为可能,我们需要在进程和设备之间建立一个数据通道。要建立此数据通道,首先,你需要一个QRemoteObjectNode。
在QtRO中,一个节点是通信的端点。在远程对象网络中,每个参与者,无论是进程还是设备,都需要自己的节点。QtRO是一个对等网络,连接的节点是网络中的链接。
节点本身并不提供太多用途。但当你向节点添加QObject类以共享时,它们的价值就显现出来了。然后,任何对等节点都可以向主机节点,即共享此节点的节点,请求共享对象的副本或实例。
与使用普通类实例(具有独立的属性和信号发射)不同,QtRO自动同步共享对象在其所有副本中的更改。在不使用进程间通信(IPC)的情况下开发时,通常不会遇到这些副本有与原始对象相同Qt API的例外情况,并且可以像使用原对象一样使用它们。
在QtRO中,原始对象被称为源。它是一个完整实现的C++类,具有提供所需功能所需的所有业务逻辑。此对象的副本称为副本。您不需要为副本编写任何C++代码;而是从节点请求一个实例。虽然您需要一些代码来使用副本,例如将信号连接到您自己的槽,但不需要实现内部行为——这已经在源中为您完成了。
因为源可以在不同的进程中,甚至在不同的设备上,所以在QtRO中需要考虑一些因素,这在没有使用IPC开发时通常不会遇到。特别是,如果没有进程或设备怎么办?这是副本API添加的地方。
- 当副本从QtRO网络接收到源状态时,会发出initialized()信号。
- 无论是isReplicaValid属性还是stateChanged()信号都会在连接丢失时发出警报。
通过QtRO共享的对象使用节点之间的链路(通道)进行所有通信。如果您想共享一个QObject,您必须创建一个带有URL的主节点,其他节点可以连接到。您还可以使用注册表来简化连接,但共享资源的节点仍然需要作为主节点。每个共享对象都有一个名字(一个QString),用于在QtRO网络上识别它。
实现
为了说明远程对象的使用,在源端,我们需要
- 创建要复制到其他节点的资源对象,可以或不可以使用repc(Qt远程对象编译器)。
- 可选地,创建注册表。否则,使用直接连接。
- 创建一个主机节点,以便共享资源对象。
- 调用节点的enableRemoting()函数来共享资源对象。
在副本端,我们需要
以下示例说明了通过repc编译的静态对象和动态源对象。此外,它们还显示了直接连接以及使用注册表的节点之间的连接。
© 2024 Qt公司有限公司。此处包含的文档贡献拥有其各自的版权。本文档依据自由软件基金会发布的GNU自由文档许可版1.3的条款提供文档。