Introducción Qt Remote Objects
Introducción
El módulo Qt Remote Objects proporciona una forma sencilla de compartir APIs Qt entre procesos y dispositivos. Para que esto funcione, necesitamos un canal de datos entre procesos y dispositivos. Para establecer este canal de datos, primero, necesitas un QRemoteObjectNode.
En QtRO, un nodo es un punto final para la comunicación. En una red de objetos remotos, cada participante, ya sea un proceso o un dispositivo, necesita su propio nodo. QtRO es una red peer-to-peer, en la que los nodos conectados son los enlaces de la red.
Los nodos, por sí mismos, no proporcionan mucha utilidad. Pero su valor viene cuando añades clases QObject a un nodo para compartir. Entonces, cualquier nodo par puede solicitar una copia o instancia del objeto compartido al nodo anfitrión, el nodo que lo comparte.
A diferencia de cuando se utilizan instancias de clases normales (con propiedades independientes y emisiones de señales), QtRO sincroniza automáticamente los cambios en el objeto compartido en todas sus copias. Con algunas excepciones, estas copias tienen la API de Qt idéntica a la del objeto original, y están pensadas para ser utilizadas exactamente como si el objeto original estuviera disponible.
En QtRO, el objeto original se llama Fuente. Es una clase C++ completamente implementada, con la lógica de negocio necesaria para proporcionar la funcionalidad requerida. Las copias de este objeto se llaman Réplicas. No necesitas escribir ningún código C++ para una réplica; en su lugar, solicitas una instancia a un nodo. Aunque necesitas algo de código para usar la réplica, como conectar señales a tus propios slots, no necesitas implementar el comportamiento interno - eso ya está hecho por ti en el código fuente.
Debido a que la fuente puede estar en un proceso diferente o incluso en un dispositivo diferente, hay factores en QtRO que necesitas considerar, con los que normalmente no te encontrarías cuando desarrollas sin Comunicación entre Procesos (IPC). Específicamente, ¿qué pasa si el proceso o dispositivo no está ahí? Aquí es donde entran las adiciones a la API de Réplica:
- La señal initialized() se emite una vez que la réplica ha recibido el estado fuente de la red QtRO.
- Tanto la propiedad isReplicaValid como la señal stateChanged() alertan si se pierde la conexión.
Los objetos compartidos a través de QtRO utilizan los enlaces (conductos) entre nodos para toda la comunicación. Si quieres compartir un QObject, debes crear un nodo anfitrión con una URL a la que otros nodos puedan conectarse. También puede utilizar el Registro para facilitar las conexiones, pero los nodos que comparten fuentes deben ser nodos anfitriones. Cada objeto compartido recibe un nombre (un QString), utilizado para identificarlo en la red QtRO.
Implementación
Para ilustrar el uso de objetos remotos, en el lado de la fuente, necesitamos
- Crear el objeto Fuente que se replica a otros nodos, con o sin usar repc, el compilador Qt Remote Objects.
- Opcionalmente, crear el Registro. Si no, utilizar conexiones directas.
- Crear un nodo anfitrión para que el objeto fuente pueda ser compartido.
- Llame a la función enableRemoting() del nodo para compartir el objeto fuente.
En el lado de la réplica:
- Opcionalmente, usar repc para generar una cabecera de réplica para tu proyecto.
- Crear el nodo que se conectará con el nodo anfitrión Fuente.
- Llamar a la función acquire() del nodo para crear un puntero a una réplica.
Los siguientes ejemplos ilustran tanto objetos estáticos compilados por repc como objetos fuente dinámicos. Además, también muestran conexiones directas así como conexiones que utilizan un Registro entre nodos.
© 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.