Sur cette page

Qt Remote Objects

Concepts des objets distants

Qt Remote Objects (QtRO) est un module de communication inter-processus (IPC) développé pour Qt. Ce module étend les fonctionnalités existantes de Qt pour permettre l'échange d'informations entre processus ou ordinateurs, facilement.

L'une des principales caractéristiques de Qt, pour permettre cet échange d'informations, est la distinction entre l'API d'un objet (définie par ses propriétés, ses signaux et ses slots) et l'implémentation de cette API. L'objectif de QtRO est de répondre à cette API attendue, même si le véritable QObject se trouve dans un processus différent. Un slot appelé sur une copie d'un objet (la réplique dans QtRO) est transmis à l'objet réel (la source dans QtRO) pour traitement. Chaque réplique reçoit des mises à jour de la source, qu'il s'agisse de modifications de propriétés ou de signaux émis.

Une Replica est un proxy léger pour l'objet Source, mais une Replica supporte les mêmes connexions et le même comportement que les QObjects, ce qui la rend utilisable de la même manière que n'importe quel autre QObject fourni par Qt. Dans les coulisses, QtRO gère tout ce qui est nécessaire pour que la réplique ressemble à sa source.

Notez que les objets distants se comportent différemment des implémentations traditionnelles d'appel de procédure à distance (RPC), par exemple :

  • Dans un RPC, le client fait une demande et attend la réponse.
  • Dans le cas d'un RPC, le serveur ne transmet rien au client à moins que ce ne soit en réponse à une demande.
  • Souvent, la conception de RPC est telle que les différents clients sont indépendants les uns des autres : par exemple, deux clients peuvent demander des directions à un service de cartographie et obtenir des résultats différents.

Bien qu'il soit possible d'implémenter ce comportement de type RPC dans QtRO, en tant que Sources sans propriétés et slots avec valeurs de retour, QtRO cache le fait que le traitement est réellement à distance. Vous laissez un nœud vous donner la réplique au lieu de la créer vous-même, vous utilisez éventuellement les signaux d'état (isReplicaValid()), mais vous interagissez ensuite avec l'objet comme vous le feriez avec n'importe quel autre type basé sur QObject.

Cas d'utilisation : GPS

Considérons un capteur tel qu'un récepteur GPS (Global Positioning System). En termes de QtRO :

  • La source serait le processus qui interagit directement avec le matériel GPS et déduit votre position actuelle.
  • L'emplacement serait exposé sous forme de propriétés QObject; les mises à jour périodiques de l'emplacement mettraient à jour ces propriétés et émettraient des signaux de changement de propriété.
  • Desrépliques seraient créées dans d'autres processus et connaîtraient toujours votre position actuelle, mais n'auraient besoin d'aucune logique pour calculer la position à partir des données du capteur.
  • La connexion au signal de changement d'emplacement sur la réplique fonctionnerait comme prévu : le signal émis par la source déclencherait l'émission du signal sur chaque réplique.

Cas d'utilisation : Accès à l'imprimante

Considérons un service qui fournit un accès à une imprimante. En termes de QtRO :

  • La source serait le processus contrôlant directement l'imprimante.
  • Les niveaux d'encre et l'état de l'imprimante seraient contrôlés par les propriétés QObject. Les mises à jour de ces propriétés émettraient des signaux de changement de propriété.
  • La caractéristique principale - être capable d'imprimer quelque chose - doit être transmise à l'imprimante. Incidemment, cela s'aligne sur le mécanisme de slot de Qt, que QtRO utilise comme moyen pour les répliques de faire des appels à la source. En effet, les propriétés et les signaux vont de la source aux répliques ; les slots vont de la réplique à la source.
  • Lorsqu'une demande d'impression est acceptée, l'état de l'imprimante change, ce qui entraîne une modification de la propriété "status". Ce changement est alors signalé à toutes les répliques.

Utilisation du module

L'utilisation d'un module Qt nécessite l'établissement d'un lien avec la bibliothèque du module, soit directement, soit par l'intermédiaire d'autres dépendances. Plusieurs outils de construction ont un support dédié pour cela, y compris CMake et qmake.

Construction avec CMake

Utilisez la commande find_package() pour localiser les composants du module nécessaire dans le paquet Qt6:

find_package(Qt6 REQUIRED COMPONENTS RemoteObjects)

Voir aussi l'aperçu de la construction avec CMake.

Construire avec qmake

Pour configurer le module afin qu'il soit construit avec qmake, ajoutez le module comme valeur de la variable QT dans le fichier .pro du projet :

QT       += remoteobjects

Articles et guides

Référence API

Licences

Qt Remote Objects est disponible sous licence commerciale auprès de The Qt Company. En outre, il est disponible sous la licence publique générale amoindrie de GNU, version 3, ou la licence publique générale de GNU, version 2. Voir Qt Licensing pour plus de détails.

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