Le système de types d’ Qt D-Bus
D-Bus dispose d’un système de types extensible basé sur quelques types primitifs et sur la composition de ces types dans des tableaux et des structures. Qt D-Bus implémente l’interface vers ce système de types via la classe ` QDBusArgument `, permettant ainsi aux programmes utilisateurs d’envoyer et de recevoir pratiquement tous les types C++ via le bus.
Types primitifs
Les types primitifs sont pris en charge en natif par QDBusArgument et ne nécessitent aucune personnalisation particulière pour être envoyés ou reçus. Ils sont répertoriés ci-dessous, accompagnés de la classe C++ à laquelle ils correspondent :
| Type Qt | Type équivalent D-Bus |
|---|---|
| uchar | BYTE |
| bool | BOOLEAN |
| short | 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 prend également en charge nativement deux types non primitifs, en raison de leur utilisation très répandue dans les applications Qt : QStringList et QByteArray.
Types composés
D-Bus spécifie trois types d’agrégats de types primitifs permettant de créer des types composés. Il s’agit de l’ ARRAY, de l’ STRUCT et des tables de correspondance (ou dictionnaires).
Les tableaux sont des ensembles contenant zéro ou plusieurs éléments d’un même type, tandis que les structures sont des ensembles d’un nombre fixe d’éléments, chacun pouvant être de n’importe quel type. Les cartes ou dictionnaires sont implémentés sous la forme de tableaux de paires d’éléments ; une carte peut donc contenir zéro ou plusieurs éléments.
Extension du système de types
Pour pouvoir utiliser son propre type avec Qt D-Bus, celui-ci doit être déclaré en tant que méta-type Qt à l’aide de la macro Q_DECLARE_METATYPE() et enregistré via la fonction qDBusRegisterMetaType(). Les opérateurs de flux operator>> et operator<< seront automatiquement détectés par le système d’enregistrement.
Qt D-Bus fournit des spécialisations de modèles pour les tableaux et les cartes à utiliser avec les classes de conteneurs de Qt, telles que QMap et QList; il n’est donc pas nécessaire d’écrire les fonctions des opérateurs de flux pour celles-ci. Pour les structures, Qt fournit des spécialisations génériques assurant la correspondance vers et depuis std::tuple. Afin d’utiliser un type personnalisé à la place ou pour d’autres types, les opérateurs doivent être implémentés explicitement.
Consultez la documentation relative à QDBusArgument pour des exemples concernant les structures, les tableaux et les tables.
Le système de types en pratique
Tous les types de Qt D-Bus (qu’ils soient primitifs ou 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.