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