Das Qt D-Bus Typsystem

D-Bus verfügt über ein erweiterbares Typsystem, das auf einigen wenigen Primitiven und der Komposition der Primitiven in Arrays und Strukturen basiert. Qt D-Bus implementiert die Schnittstelle zu diesem Typsystem durch die Klasse QDBusArgument, so dass Benutzerprogramme praktisch jeden C++-Typ über den Bus senden und empfangen können.

Primitive Typen

Die primitiven Typen werden von QDBusArgument nativ unterstützt und müssen nicht speziell angepasst werden, um gesendet oder empfangen zu werden. Sie sind im Folgenden zusammen mit der C++-Klasse aufgeführt, auf die sie sich beziehen:

Qt-TypD-Bus äquivalenter Typ
ucharBYTE
boolBOOLEAN
kurzINT16
ushortUINT16
intINT32
uintUINT32
qlonglongINT64
qulonglongUINT64
doubleDOUBLE
QStringSTRING
QDBusVariantVARIANT
QDBusObjectPathOBJEKT_PFADE
QDBusSignatureSIGNATUR

Neben den primitiven Typen unterstützt QDBusArgument aufgrund ihrer weiten Verbreitung in Qt-Anwendungen auch zwei nicht-primitive Typen: QStringList und QByteArray.

Zusammengesetzte Typen

D-Bus spezifiziert drei Arten von Aggregationen von primitiven Typen, die es erlauben, zusammengesetzte Typen zu erstellen. Diese sind ARRAY, STRUCT und Maps/Dictionaries.

Arrays sind Mengen von null oder mehr Elementen desselben Typs, während Strukturen eine Menge aus einer festen Anzahl von Elementen jedes beliebigen Typs sind. Maps oder Dictionaries sind als Arrays mit einem Paar von Elementen implementiert, so dass eine Map null oder mehr Elemente enthalten kann.

Erweitern des Typsystems

Um einen eigenen Typ mit Qt D-Bus zu verwenden, muss der Typ als Qt-Meta-Typ mit dem Makro Q_DECLARE_METATYPE() deklariert und mit der Funktion qDBusRegisterMetaType() registriert werden. Die Streaming-Operatoren operator>> und operator<< werden vom Registrierungssystem automatisch gefunden.

Qt D-Bus bietet Template-Spezialisierungen für Arrays und Maps zur Verwendung mit den Container-Klassen von Qt, wie QMap und QList, so dass es nicht notwendig ist, die Streaming-Operator-Funktionen für diese zu schreiben. Für andere Typen, und speziell für Typen, die Strukturen implementieren, müssen die Operatoren explizit implementiert werden.

In der Dokumentation zu QDBusArgument finden Sie Beispiele für Strukturen, Arrays und Maps.

Das verwendete Typsystem

Alle Typen von Qt D-Bus (sowohl Primitive als auch benutzerdefinierte) können verwendet werden, um Nachrichten aller Typen über den Bus zu senden und zu empfangen.

Warnung: Sie dürfen keine Typen verwenden, die nicht in der obigen Liste aufgeführt sind, einschließlich typedefs zu den aufgeführten Typen. Dies schließt auch QList<QVariant> und QMap<QString,QVariant> ein.

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