Qt远程对象源#
描述了源的概念以及如何使用repc生成的源头文件。.. _source: QRemoteObjectSource(“源”)是QObject,负责实现公开的API。
从高层次来看,你可以选择直接使用QObject类型作为源;或者你可以在.rep
模板中定义所需的API以与repc编译器一起使用。
如果你已经有一个完全定义的QObject,你可以通过将其传递给enableRemoting()
使用它作为源。这样,其他进程或设备就可以创建对象的动力复制(dynamics replicas
)来与之交互。
有关更多信息,请参阅远程对象交互。
使用REPC_SOURCE变量,允许repc为你的项目生成源头文件,提供三种不同的选项来实现所需的API。
假设你的类名为Foo,那么你有以下几种选择
FooSourceAPI使用你自己的QObject
有关如何创建.rep
文件的更详细说明,请参阅rep文件格式。
在头文件中定义了一个名为<Type>SimpleSource
的类,它为每个属性提供了基本的getter/setter方法,并在头文件中实现了正确属性类型的数据成员。“<Type>”代表.rep
文件中的类名,因此如果您的类在.rep
文件中的类型为“MyType”,则生成的头文件将声明MyTypeSimpleSource类。这是一个快速开始使用API的方法。要使用此类,你需要编写一个继承自它的类,并实现生成的头文件中标记为纯虚的任何槽位。你还需要在你的类中添加必要的逻辑来管理公开的属性和发出信号。
如果您需要隐藏实现细节,请使用头文件中声明的第二个类,即《
头文件中生成的第三个类是《enableRemoting()
方法,允许您使用支持所需 API 的任何 QObject 作为源。使用这个类来隐藏或转换属性或信号/槽参数。如果您的实现没有提供正确的 API,将会有编译时警告。
注意
副本和源都继承自 QObject;但它们的 QObject API 永远不会公开。例如,虽然副本有一个销毁信号,但源的销毁信号不会传递。源及其每个副本都是独特的 QObject,它们有自己的事件连接和生命周期。相反,公开的 API 由 repc 所使用的 .rep
模板定义。对于原始 QObject,所有 API 元素都定义在从一个特定祖先继承的继承链中。如果祖先中定义了 Q_CLASSINFO("RemoteObject Type")
,则使用 QObject 的父对象,除非在祖先中定义了 Q_CLASSINFO("RemoteObject Type")
。如果您使用 Q_CLASSINFO("RemoteObject Type")
,那么该类的 API 就是使用的最低级别的 API。
识别源#
因为主节点可以共享多个源,所以每个源都需要一个名字。所有由 repc 生成的头文件都包括一种方式,让节点确定类名:用于副本、 simplesource 或源类型的 Q_CLASSINFO;或用于 SourceAPI 类型的静态 name()
函数。如果您将您的 QObject 类型传递给 enableRemoting()
,则使用以下逻辑确定名字
可以可选地向
enableRemoting()
传递名字。如果提供,则使用该名字。如果对象或其任何祖先有定义类型为“RemoteObject Type”的 Q_CLASSINFO,则使用该类型名。
如果设置了 QObject 的 objectName,则使用它。
如果没有以上任何一个可用,则调用
enableRemoting()
失败,返回 false。