Sur cette page

Qt Remote Objects Source

À un niveau élevé, vous pouvez choisir d'utiliser un type QObject directement comme source ; ou vous pouvez définir l'API souhaitée dans un modèle .rep à utiliser avec le compilateur repc.

Si vous disposez déjà d'un type QObject entièrement défini, vous pouvez l'utiliser comme source en le passant à QRemoteObjectHostBase::enableRemoting(). De cette manière, d'autres processus ou dispositifs peuvent créer dynamics replicas de l'objet pour interagir avec lui.

Pour plus d'informations, voir Interaction d'objets à distance.

En laissant repc générer un fichier d'en-tête source pour votre projet, à l'aide de la variable REPC_SOURCE, vous disposez de trois options différentes pour mettre en œuvre l'API requise.

Supposons que le nom de votre classe soit Foo, vous avez alors les options suivantes :

Pour plus de détails sur la création d'un fichier .rep, voir Le format de fichier rep.

Une classe <Type>SimpleSource est définie dans l'en-tête, qui fournit les méthodes getter/setter de base pour chaque propriété et implémente les membres de données du type de propriété correct dans l'en-tête. "<Type>" représente ici le nom de la classe dans le fichier .rep. Ainsi, si votre classe est de type "MyType" dans le fichier .rep, le fichier d'en-tête généré contiendra une classe MyTypeSimpleSource déclarée. Il s'agit d'un moyen rapide de commencer à utiliser l'API. Pour utiliser cette classe, vous devez écrire une classe qui en hérite et implémenter tous les slots définis, qui sont marqués comme virtuels purs dans le fichier d'en-tête généré. Vous devez également ajouter à votre classe la logique nécessaire pour gérer les propriétés exposées et émettre des signaux.

Si vous souhaitez masquer les détails de votre implémentation, utilisez la deuxième classe déclarée dans le fichier d'en-tête, la classe <Type>Source. La définition de cette classe ne fournit pas de membres de données et rend les fonctions getter/setter purement virtuelles. Bien que vous deviez écrire plus de code, l'utilisation de cette classe vous donne plus de flexibilité dans votre implémentation.

La troisième classe générée dans l'en-tête est <Type>SourceAPI. Il s'agit d'une classe modélisée, utilisée spécifiquement par la version modélisée de QRemoteObjectHostBase::enableRemoting(), qui vous permet d'utiliser n'importe quel QObject qui prend en charge l'API requise en tant que source. Utilisez cette classe pour masquer ou convertir des propriétés ou des paramètres de signaux/emplacements. Si votre implémentation ne fournit pas l'API correcte, il y aura des avertissements à la compilation.

Remarque : les répliques et les sources dérivent toutes deux de QObject; mais leur API QObject n' est jamais exposée. Par exemple, si une réplique a un signal destroyed, le signal destroyed de la source n'est pas propagé. La source et chacune de ses répliques sont des QObjects uniques avec leurs propres connexions et durées de vie. L'API exposée est définie par le modèle .rep utilisé par repc. Dans le cas des QObjects bruts, tous les éléments de l'API sont définis dans la chaîne d'héritage à partir d'un ancêtre spécifique. Le parent de QObject est toujours utilisé, sauf si vous définissez Q_CLASSINFO("RemoteObject Type") dans un ancêtre. Si vous utilisez Q_CLASSINFO("RemoteObject Type"), l'API de cette classe est le plus bas niveau d'API utilisé.

Identification des sources

Étant donné qu'un nœud hôte peut partager plus d'une source, chaque source a besoin d'un nom. Tous les en-têtes générés par repc incluent un moyen pour le nœud de déterminer le nom de la classe : Q_CLASSINFO pour les types réplique, simple source ou source ; ou une fonction statique name() pour le type SourceAPI. Si vous passez votre propre type QObject à QRemoteObjectHostBase::enableRemoting(), le nom est déterminé selon la logique suivante :

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