Commencer avec Qt Remote Objects
Introduction
Le module Qt Remote Objects permet de partager facilement les API Qt entre les processus et les périphériques. Pour que cela fonctionne, nous avons besoin d'un canal de données entre les processus et les périphériques. Pour établir ce canal de données, vous avez tout d'abord besoin d'un QRemoteObjectNode.
Dans QtRO, un nœud est un point de terminaison pour la communication. Dans un réseau d'objets distants, chaque participant, qu'il s'agisse d'un processus ou d'un appareil, a besoin de son propre nœud. QtRO est un réseau pair-à-pair, les nœuds connectés étant les liens du réseau.
Les nœuds, en eux-mêmes, ne sont pas très utiles. Mais ils prennent toute leur valeur lorsque vous ajoutez des classes QObject à un nœud à partager. Ensuite, tout nœud homologue peut demander une copie ou une instance de l'objet partagé au nœud hôte, le nœud qui le partage.
Contrairement à l'utilisation d'instances de classes normales (avec des propriétés indépendantes et des émissions de signaux), QtRO synchronise automatiquement les modifications apportées à l'objet partagé sur l'ensemble de ses copies. À quelques exceptions près, ces copies ont la même API Qt que l'objet original et sont destinées à être utilisées exactement comme si l'objet original était disponible.
Dans QtRO, l'objet original est appelé Source. Il s'agit d'une classe C++ entièrement implémentée, avec la logique commerciale nécessaire pour fournir la fonctionnalité requise. Les copies de cet objet sont appelées répliques. Il n'est pas nécessaire d'écrire du code C++ pour une réplique ; il suffit de demander une instance à un nœud. Bien que vous ayez besoin de code pour utiliser la réplique, par exemple pour connecter des signaux à vos propres slots, vous n'avez pas besoin d'implémenter le comportement interne - cela est déjà fait pour vous dans la source.
Parce que la source peut être dans un processus différent ou même sur un périphérique différent, il y a des facteurs dans QtRO que vous devez prendre en compte, que vous n'auriez pas rencontré en développant sans communication inter-processus (IPC). Plus précisément, que se passe-t-il si le processus ou le périphérique n'est pas là ? C'est là que les ajouts à l'API Replica entrent en jeu :
- Le signal initialized() est émis une fois que la réplique a reçu l'état de la source du réseau QtRO.
- La propriété isReplicaValid et le signal stateChanged() vous alertent en cas de perte de connexion.
Les objets partagés via QtRO utilisent les liens (conduits) entre les nœuds pour toutes les communications. Si vous voulez partager un QObject, vous devez créer un nœud hôte avec une URL à laquelle les autres nœuds peuvent se connecter. Vous pouvez également utiliser le registre pour faciliter les connexions, mais vos nœuds qui partagent des sources doivent toujours être des nœuds hôtes. Chaque objet partagé reçoit un nom ( QString), utilisé pour l'identifier sur le réseau QtRO.
Mise en œuvre
Pour illustrer l'utilisation d'objets distants, du côté de la source, nous devons
- Créer l'objet Source qui est répliqué sur d'autres nœuds, avec ou sans l'utilisation de repc, le Compilateur Qt Remote Objects.
- Optionnellement, créer le Registre. Sinon, utiliser des connexions directes.
- Créer un nœud hôte pour que l'objet source puisse être partagé.
- Appelez la fonction enableRemoting() du nœud pour partager l'objet source.
Du côté de la réplique, nous devons.. :
- Optionnellement, utiliser repc pour générer un en-tête de réplique pour votre projet.
- Créer le nœud qui se connectera au nœud hôte source.
- Appeler la fonction acquire() du nœud pour créer un pointeur vers une réplique.
Les exemples suivants illustrent à la fois des objets statiques compilés par Repc et des objets source dynamiques. Ils montrent également des connexions directes ainsi que des connexions utilisant un registre entre les nœuds.
© 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.