Auf dieser Seite

Das Qt D-Bus -Typsystem

D-Bus verfügt über ein erweiterbares Typsystem, das auf einigen wenigen Primitivtypen und der Zusammensetzung dieser Primitivtypen in Arrays und Strukturen basiert. Qt D-Bus implementiert die Schnittstelle zu diesem Typsystem über die Klasse „ QDBusArgument “, wodurch Anwenderprogramme praktisch jeden C++-Typ über den Bus senden und empfangen können.

Primitive Typen

Die primitiven Typen werden von „ QDBusArgument “ nativ unterstützt und erfordern keine spezielle Anpassung, um gesendet oder empfangen zu werden. Sie sind nachfolgend zusammen mit der zugehörigen C++-Klasse aufgeführt:

Qt-TypEntsprechender D-Bus-Typ
ucharBYTE
boolBOOLEAN
shortINT16
ushortUINT16
intINT32
uintUINT32
qlonglongINT64
qulonglongUINT64
doubleDOUBLE
QStringSTRING
QDBusVariantVARIANT
QDBusObjectPathOBJECT_PATH
QDBusSignatureSIGNATURE

Neben den primitiven Typen unterstützt „ QDBusArgument “ aufgrund ihrer weit verbreiteten Verwendung in Qt-Anwendungen auch zwei nicht-primitive Typen nativ: „ QStringList “ und „ QByteArray “.

Zusammengesetzte Typen

D-Bus definiert drei Arten von Aggregationen primitiver Typen, mit denen sich zusammengesetzte Typen erstellen lassen. Dabei handelt es sich um „ ARRAY “, „ STRUCT “ und „Maps/Dictionaries“.

Arrays sind Mengen aus null oder mehr Elementen desselben Typs, während Strukturen eine Menge aus einer festen Anzahl von Elementen sind, wobei jedes Element einen beliebigen Typ haben kann. Maps oder Dictionaries werden als Arrays aus Elementpaaren implementiert, sodass eine Map null oder mehr Elemente enthalten kann.

Erweiterung des Typsystems

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

Qt D-Bus bietet Template-Spezialisierungen für Arrays und Maps zur Verwendung mit den Containerklassen von Qt, wie z. B. ` QMap ` und ` QList`, sodass es nicht notwendig ist, die Streaming-Operatorfunktionen für diese zu schreiben. Für Strukturen bietet Qt generische Spezialisierungen, die auf ` std::tuple` abbilden und von diesem zurückführen. Um stattdessen einen benutzerdefinierten Typ oder andere Typen zu verwenden, müssen die Operatoren explizit implementiert werden.

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

Das Typsystem in der Praxis

Alle Typen aus Qt D-Bus (sowohl primitive als auch benutzerdefinierte) können zum Senden und Empfangen von Nachrichten aller Typen über den Bus verwendet werden.

Warnung: Sie dürfen keinen Typ verwenden, der nicht in der obigen Liste aufgeführt ist, einschließlich der Erweiterung „ typedefs “ der aufgeführten Typen. Dies umfasst auch QList<QVariant> und QMap<QString,QVariant>.

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