Le système de types Qt D-Bus
Le D-Bus possède un système de types extensible basé sur quelques primitives et sur la composition de ces primitives dans des tableaux et des structures. Qt D-Bus implémente l'interface de ce système de types à travers la classe QDBusArgument, permettant aux programmes utilisateurs d'envoyer et de recevoir pratiquement tous les types C++ sur le bus.
Types primitifs
Les types primitifs sont pris en charge de manière native par QDBusArgument et ne nécessitent aucune adaptation particulière pour être envoyés ou reçus. Ils sont énumérés ci-dessous, avec la classe C++ à laquelle ils se rapportent :
| Type Qt | Type équivalent D-Bus |
|---|---|
| uchar | BYTE |
| bool | BOOLEAN |
| court | INT16 |
| ushort | UINT16 |
| int | INT32 |
| uint | UINT32 |
| qlonglong | INT64 |
| qulonglong | UINT64 |
| double | DOUBLE |
| QString | STRING |
| QDBusVariant | VARIANT |
| QDBusObjectPath | OBJECT_PATH |
| QDBusSignature | SIGNATURE |
Outre les types primitifs, QDBusArgument supporte également deux types non primitifs en natif, en raison de leur utilisation répandue dans les applications Qt : QStringList et QByteArray.
Types composés
D-Bus spécifie trois types d'agrégations de types primitifs qui permettent de créer des types composés. Il s'agit de ARRAY, STRUCT et des cartes/dictionnaires.
Les tableaux sont des ensembles de zéro ou plusieurs éléments du même type, tandis que les structures sont un ensemble d'un nombre fixe d'éléments, chacun de n'importe quel type. Les cartes ou les dictionnaires sont mis en œuvre sous forme de tableaux d'une paire d'éléments, de sorte qu'il peut y avoir zéro ou plusieurs éléments dans une carte.
Extension du système de types
Afin d'utiliser son propre type avec Qt D-Bus, le type doit être déclaré en tant que méta-type Qt avec la macro Q_DECLARE_METATYPE() et enregistré avec la fonction qDBusRegisterMetaType(). Les opérateurs de streaming operator>> et operator<< seront automatiquement trouvés par le système d'enregistrement.
Qt D-Bus Qt fournit des spécialisations de modèles pour les tableaux et les cartes à utiliser avec les classes conteneurs de Qt, telles que QMap et QList, de sorte qu'il n'est pas nécessaire d'écrire les fonctions de l'opérateur de flux pour celles-ci. Pour les structures, Qt XML fournit des spécialisations génériques qui correspondent à std::tuple. Pour utiliser un type personnalisé à la place ou pour d'autres types, les opérateurs doivent être explicitement mis en œuvre.
Voir la documentation de QDBusArgument pour des exemples de structures, de tableaux et de cartes.
Le système de types utilisé
Tous les types de Qt D-Bus (primitifs et définis par l'utilisateur) peuvent être utilisés pour envoyer et recevoir des messages de tous types sur le bus.
© 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.