Qt Remote Objects 来源

在高层次上,您可以选择直接使用QObject 类型作为源;也可以在.rep 模板中定义所需的 API,供repc编译器使用。

如果您已经有一个完全定义的QObject ,您可以通过将其传递给QRemoteObjectHostBase::enableRemoting() 来将其用作源代码。这样,其他进程或设备就可以创建该对象的dynamics replicas 来进行交互。

更多信息,请参阅远程对象交互

使用REPC_SOURCE变量让 repc 为您的项目生成源头文件,可提供三种不同的选项来实现所需的 API。

假设您的类名为 Foo,则有以下选项:

有关如何创建.rep 文件的详细信息,请参阅rep 文件格式

文件头中定义了一个 <Type>SimpleSource 类,该类为每个属性提供了基本的 getter/setter 方法,并实现了文件头中正确属性类型的数据成员。这里的"<Type>"代表.rep 文件中的类名,因此如果你的类在.rep 文件中的类型是 "MyType",那么生成的头文件中就会声明一个 MyTypeSimpleSource 类。这是一种快速开始使用 API 的方法。要使用该类,您需要编写一个继承自该类的类,并实现任何已定义的槽,这些槽在生成的头文件中被标记为纯虚拟。您还需要在类中添加必要的逻辑来管理暴露的属性和发射信号。

如果需要隐藏实现细节,请使用头文件中声明的第二个类,即 <Type>Source 类。该类的定义不提供数据成员,也使 getter/setter 函数成为纯虚拟函数。虽然您可能需要编写更多代码,但使用该类可以让您的实现更加灵活。

头文件中生成的第三个类是 <Type>SourceAPI 类。这是一个模板类,专门用于QRemoteObjectHostBase::enableRemoting() 的模板版本,它允许你使用任何支持所需 API 的QObject 作为源代码。使用该类可以隐藏或转换属性或信号/插槽参数。如果您的实现没有提供正确的 API,则会出现编译时警告。

注意: 副本和源都派生自QObject ;但它们的QObject API永远不会公开。例如,当副本有destroyed 信号时,源的destroyed 信号不会传播。源及其每个副本都是独一无二的 QObject,有自己的连接和生命周期。相反,公开的 API 是由 repc 使用的.rep 模板定义的。在原始 QObjects 的情况下,所有 API 元素都是通过特定祖先的继承链定义的。除非您在祖先中定义了Q_CLASSINFO("RemoteObject Type") ,否则总是使用QObject 的父类。如果使用Q_CLASSINFO("RemoteObject Type") ,则该类的 API 是使用的最低级别 API。

识别来源

由于一个主机节点可以共享多个源,因此每个源都需要一个名称。所有 repc 生成的标头都包含节点确定类名的方法:Q_CLASSINFO ,用于复制、simplesource 或源类型;或静态name() 函数,用于 SourceAPI 类型。如果向QRemoteObjectHostBase::enableRemoting() 传递自己的QObject 类型,名称将通过以下逻辑确定:

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.