Qt Remote Objects (QtRO) 教程
简介
Qt Remote Objects (QtRO) 是 Qt 的一个进程间通信模块。
术语
Source
是指提供服务或提供功能供其他程序使用的对象,是 RPC 中的被调用端。
Replica
是指 Source
对象的代理对象,用于 RPC 中的调用端,对 Replica
的调用请求将被转发给 Source
对象。
示例1:Direct Connection using a Static Source
创建接口定义文件
创建接口定义文件 simpleswitch.rep :
1 | class SimpleSwitch |
修改 .pro 文件
1 | // 引入 QtRO 模块 |
Qt 将使用 repc 工具编译该接口定义文件生成 C++ 代码。
生成的文件:
- rep_simpleswitch_source.h
- rep_simpleswitch_replica.h
rep_simpleswitch_source.h 用于 Source
端,需要继承其中的接口类,实现其中的虚函数。
rep_simpleswitch_replica.h 用于 Replica
端,是 Source
对象的代理对象。
Source
端
实现 rep_simpleswitch_source.h 中接口类的虚函数,作为服务对象。
创建服务对象,并设置为可远程访问:
1 | SimpleSwitch srcSwitch; // create simple switch |
Replica
端
连接到服务端:
1 | QSharedPointer<SimpleSwitchReplica> ptr; |
获取到 SimpleSwitchReplica 对象指针之后,就可以像使用普通 Qt 对象那样使用该对象,该对象拥有和服务对象相同的接口函数(信号函数、槽函数等)。
客户端也可以不使用 rep_simpleswitch_replica.h ,而是使用 QRemoteObjectDynamicReplica 类来动态地与服务对象交互。
示例2:Connections to Remote Nodes using a Registry
第一个示例是采用直接连接的方式,即代理对象直接连接到服务对象。
另一种方式是使用注册中心,此时服务对象将自己注册到服务中心,客户端连接到注册中心,然后获取指定服务对象的代理对象。
服务端:
1 | // 注册中心,可以在一个单独的进程中 |
客户端:
1 | QSharedPointer<SimpleSwitchReplica> ptr; |