Premiers pas avec Qt Remote Objects
Introduction
Le module « Qt Remote Objects » offre un moyen simple de partager les API Qt entre les processus et les périphériques. Pour que cela fonctionne, un canal de données entre les processus et les périphériques est nécessaire. Pour établir ce canal de données, vous devez d’abord disposer 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 périphérique, doit disposer de son propre nœud. QtRO est un réseau peer-to-peer, les nœuds connectés constituant les maillons du réseau.
Les nœuds, en eux-mêmes, ne sont pas d’une grande utilité. Mais leur intérêt réside dans l’ajout de classes d’ QObject s à un nœud afin de les partager. Ainsi, n’importe quel nœud pair peut demander une copie ou une instance de l’ partagé au nœud hôte, c’est-à-dire le nœud qui le partage.
Contrairement à l'utilisation d'instances de classes classiques (dotées de propriétés indépendantes et émettant des signaux), QtRO synchronise automatiquement les modifications apportées à l'objet partagé sur l'ensemble de ses copies. À quelques exceptions près, ces copies disposent d'une API Qt identique à celle de l'objet d'origine et sont destinées à être utilisées exactement comme si l'objet d'origine était disponible.
Dans QtRO, l’objet d’origine est appelé « Source ». Il s’agit d’une classe C++ entièrement implémentée, dotée de la logique métier nécessaire pour fournir les fonctionnalités requises. Les copies de cet objet sont appelées « Répliques». Vous n’avez pas besoin d’écrire de code C++ pour une réplique ; vous demandez plutôt une instance à un nœud. Bien que vous ayez besoin d’un peu de code pour utiliser la réplique, par exemple pour connecter des signaux à vos propres slots, vous n’avez pas à implémenter le comportement interne : cela est déjà fait pour vous dans la source.
Comme la source peut se trouver dans un autre processus, voire sur un autre appareil, il existe dans QtRO des facteurs dont vous devez tenir compte et que vous ne rencontreriez généralement pas lors d’un développement sans communication interprocessus (IPC). Plus précisément, que se passe-t-il si le processus ou l’appareil n’est pas présent ? C’est là qu’interviennent les ajouts à l’API Replica :
- Le signal ` initialized()` est émis dès que la réplique a reçu l'état source du réseau QtRO.
- La propriété ` isReplicaValid ` et le signal ` stateChanged()` vous alertent tous deux en cas de perte de connexion.
Les objets partagés via QtRO utilisent les liaisons (conduits) entre les nœuds pour toutes leurs communications. Si vous souhaitez partager un ` QObject`, vous devez créer un nœud hôte doté d’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 tout de même être des nœuds hôtes. Chaque objet partagé se voit attribuer un nom (un QString), utilisé pour l’identifier sur le réseau QtRO.
Mise en œuvre
Pour illustrer l’utilisation des objets distants, côté source, nous devons :
- Créer l’objet source qui sera répliqué vers d’autres nœuds, avec ou sans utilisation de repc, le compilateur d’ Qt Remote Objects.
- Créer éventuellement le registre. Sinon, utiliser des connexions directes.
- Créer un nœud hôte afin que l’objet source puisse être partagé.
- Appeler la fonction ` enableRemoting()` du nœud pour partager l’objet source.
Du côté de la réplique, nous devons :
- Utiliser, si vous le souhaitez, repc pour générer un en-tête Replica pour votre projet.
- Créer le nœud qui se connectera au nœud hôte source.
- Appelez 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. De plus, 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.