本页内容

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>Source。这是一个模板类,专门用于模板化的QRemoteObjectHostBase::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 类型传递给QRemoteObjectHostBase::enableRemoting(),则会根据以下逻辑确定名称:

© 2026 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.