Qt Remote Objects
Conceptos de objeto remoto
Qt Remote Objects (QtRO) es un módulo de Comunicación entre Procesos (IPC) desarrollado para Qt. Este módulo extiende las funcionalidades existentes de Qt para permitir el intercambio de información entre procesos u ordenadores, de forma sencilla.
Una de las características clave de Qt, para permitir este intercambio de información, es la distinción entre la API de un objeto (definida por sus propiedades, señales y ranuras) y la implementación de esa API. El propósito de QtRO es cumplir con esa API esperada, incluso si el verdadero QObject está en un proceso diferente. Una ranura llamada en una copia de un objeto (la Réplica en QtRO) es reenviada al objeto verdadero (la Fuente en QtRO) para su manejo. Cada Réplica recibe actualizaciones de la Fuente, ya sean cambios de propiedades o señales emitidas.
Una Réplica es un proxy ligero para el objeto Fuente, pero una Réplica soporta las mismas conexiones y comportamiento de QObjects, lo que la hace utilizable de la misma manera que cualquier otro QObject que Qt proporciona. Entre bastidores, QtRO maneja todo lo necesario para que la Réplica se parezca a su Fuente.
Tenga en cuenta que los Objetos Remotos se comportan de forma diferente a las implementaciones tradicionales de Llamada a Procedimiento Remoto (RPC), por ejemplo:
- En RPC, el cliente hace una petición y espera la respuesta.
- En RPC, el servidor no envía nada al cliente a menos que sea en respuesta a una petición.
- A menudo, el diseño de RPC es tal que los distintos clientes son independientes entre sí: por ejemplo, dos clientes pueden pedir direcciones a un servicio de mapas y obtener resultados diferentes.
Aunque es posible implementar este comportamiento estilo RPC en QtRO, como Fuentes sin propiedades, y ranuras que tienen valores de retorno, QtRO oculta el hecho de que el procesamiento es realmente remoto. Dejas que un nodo te dé la Réplica en lugar de crearla tú mismo, posiblemente uses las señales de estado (isReplicaValid()), pero luego interactúas con el objeto como lo harías con cualquier otro tipo basado en QObject.
Caso práctico: GPS
Consideremos un sensor como un receptor del Sistema de Posicionamiento Global (GPS). En términos de QtRO:
- La Fuente sería el proceso que interactúa directamente con el hardware del GPS y deriva su ubicación actual.
- La ubicación se expondría como propiedades de QObject; las actualizaciones periódicas de la ubicación actualizarían estas propiedades y emitirían señales de cambio de propiedad.
- Las réplicas se crearían en otros procesos y siempre conocerían tu ubicación actual, pero no necesitarían nada de la lógica para calcular la ubicación a partir de los datos del sensor.
- La conexión a la señal de cambio de ubicación en la Réplica funcionaría como se espera: la señal emitida desde la Fuente activaría la emisión de la señal en cada Réplica.
Caso práctico: Acceso a impresoras
Consideremos un servicio que proporciona acceso a una impresora. En términos QtRO:
- La Fuente sería el proceso que controla directamente la impresora.
- Los niveles de tinta y el estado de la impresora serían monitoreados por las propiedades QObject. Las actualizaciones de estas propiedades emitirían señales de cambio de propiedad.
- La característica clave - ser capaz de imprimir algo - necesita ser pasada de vuelta a la impresora. Incidentalmente, esto se alinea con el mecanismo de ranuras de Qt, que QtRO utiliza como la forma para que las Replicas hagan llamadas a la Fuente. En efecto, las propiedades y señales van de la Fuente a las Réplicas; las ranuras van de la Réplica a la Fuente.
- Cuando una solicitud de impresión es aceptada, el estado de la impresora cambia, provocando un cambio en la propiedad status. Esto se comunicaría a todas las réplicas.
Utilización del módulo
Usar un módulo Qt requiere enlazar con la librería del módulo, ya sea directamente o a través de otras dependencias. Varias herramientas de compilación tienen soporte dedicado para esto, incluyendo CMake y qmake.
Construir con CMake
Utilice el comando find_package() para localizar los componentes necesarios del módulo en el paquete Qt6:
find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)
Véase también la descripción general de Construir con CMake.
Construir con qmake
Para configurar el módulo para su compilación con qmake, añada el módulo como valor de la variable QT en el archivo .pro del proyecto:
QT += remoteobjects
Artículos y Guías
- Primeros pasos con Qt Remote Objects
- Nodos
- Fuentes
- Réplicas
- Registro
- Uso de transportes personalizados
- Compilador
- Interacción con objetos remotos
- Resolución de problemas
- Versionado de protocolos
- Ejemplos
Referencia API
Licencias
Qt Remote Objects está disponible bajo licencias comerciales de The Qt Company. Además, está disponible bajo la Licencia Pública General Reducida de GNU, versión 3, o la Licencia Pública General de GNU, versión 2. Vea Licencias Qt para más detalles.
© 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.