En esta página

Qt Remote Objects Fuente

A alto nivel, puede elegir utilizar un tipo QObject directamente como fuente; o puede definir la API deseada en una plantilla .rep para utilizarla con el compilador repc.

Si ya tiene un tipo QObject completamente definido, puede utilizarlo como fuente pasándolo a QRemoteObjectHostBase::enableRemoting(). De este modo, otros procesos o dispositivos pueden crear dynamics replicas del objeto para interactuar con él.

Para obtener más información, consulte Interacción remota con objetos.

Dejar que repc genere un fichero de cabecera fuente para tu proyecto, usando la variable REPC_SOURCE, proporciona tres opciones diferentes para implementar la API requerida.

Supongamos que el nombre de su clase es Foo, entonces tiene las siguientes opciones:

Para más detalles sobre cómo crear un archivo .rep, consulte El formato de archivo rep.

Hay una clase <Type>SimpleSource definida en la cabecera, que proporciona los métodos getter/setter básicos para cada propiedad e implementa miembros de datos del tipo de propiedad correcto en la cabecera. "<Tipo>" aquí representa el nombre de la clase del archivo .rep, así que si su clase es del tipo "MiTipo" en el archivo .rep, entonces el archivo de cabecera generado tendrá una clase MiTipoSimpleSource declarada. Esta es una forma rápida de empezar a utilizar la API. Para utilizar esta clase, es necesario escribir una clase que herede de ella e implemente las ranuras definidas, que están marcadas como virtuales puras en el archivo de cabecera generado. También debes añadir a tu clase la lógica necesaria para gestionar las propiedades expuestas y emitir señales.

Si necesitas ocultar los detalles de tu implementación, utiliza la segunda clase declarada en el fichero de cabecera, la clase <Type>Source. La definición de esta clase no proporciona miembros de datos, y también hace que las funciones getter/setter sean puramente virtuales. Si bien es posible que tenga que escribir más código, el uso de esta clase le da más flexibilidad en su implementación.

La tercera clase generada en la cabecera es <Type>SourceAPI. Esta es una clase templada, para uso específico de la versión templada de QRemoteObjectHostBase::enableRemoting(), que te permite usar cualquier QObject que soporte la API requerida como fuente. Utilice esta clase para ocultar o convertir propiedades o parámetros de señal/ranura. Si su implementación no proporciona la API correcta, habrá advertencias en tiempo de compilación.

Nota: Tanto las réplicas como las fuentes derivan de QObject; pero su API QObject nunca está expuesta. Por ejemplo, mientras que una réplica tiene una señal destroyed, la señal destroyed de la fuente no se propaga. La fuente y cada una de sus réplicas son QObjects únicos con sus propias conexiones y tiempos de vida. En su lugar, la API que se expone está definida por la plantilla .rep utilizada por repc. En el caso de los QObjects en bruto, todos los elementos de la API se definen en la cadena de herencia a partir de un antepasado específico. El QObject's padre siempre se utiliza, a menos que defina Q_CLASSINFO("RemoteObject Type") en un ancestro. Si utilizas Q_CLASSINFO("RemoteObject Type"), la API de esa clase es el nivel más bajo de API utilizado.

Identificación de fuentes

Dado que un nodo anfitrión puede compartir más de una fuente, cada fuente requiere un nombre. Todas las cabeceras generadas por repc incluyen una forma de que el nodo determine el nombre de la clase: Q_CLASSINFO para los tipos replica, simplesource o source; o una función estática name() para el tipo SourceAPI. Si pasas tu propio tipo QObject a QRemoteObjectHostBase::enableRemoting(), el nombre se determina usando la siguiente lógica:

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