En esta página

El sistema de tipos Qt D-Bus

D-Bus tiene un sistema de tipos extensible basado en unas pocas primitivas y la composición de las primitivas en arrays y estructuras. Qt D-Bus implementa la interfaz a ese sistema de tipos a través de la clase QDBusArgument, permitiendo a los programas de usuario enviar y recibir prácticamente cualquier tipo C++ a través del bus.

Tipos primitivos

Los tipos primitivos son soportados nativamente por QDBusArgument y no necesitan ninguna personalización especial para ser enviados o recibidos. Se enumeran a continuación, junto con la clase C++ con la que se relacionan:

Tipo QtTipo equivalente D-Bus
ucharBYTE
boolBOOLEAN
shortINT16
ushortUINT16
intINT32
uintUINT32
qlonglongINT64
qulonglongUINT64
dobleDOUBLE
QStringSTRING
QDBusVariantVARIANT
QDBusObjectPathOBJECT_PATH
QDBusSignatureFIRMA

Aparte de los tipos primitivos, QDBusArgument también soporta de forma nativa dos tipos no primitivos, debido a su extendido uso en aplicaciones Qt: QStringList y QByteArray.

Tipos compuestos

D-Bus especifica tres tipos de agregaciones de tipos primitivos que permiten crear tipos compuestos. Son ARRAY, STRUCT y mapas/diccionarios.

Las matrices son conjuntos de cero o más elementos del mismo tipo, mientras que las estructuras son un conjunto de un número fijo de elementos, cada uno de cualquier tipo. Los mapas o diccionarios se implementan como arrays de un par de elementos, por lo que puede haber cero o más elementos en un mapa.

Ampliar el sistema de tipos

Para utilizar un tipo propio con Qt D-Bus, el tipo debe declararse como un metatipo Qt con la macro Q_DECLARE_METATYPE() y registrarse con la función qDBusRegisterMetaType(). Los operadores de flujo operator>> y operator<< serán encontrados automáticamente por el sistema de registro.

Qt D-Bus proporciona plantillas especializadas para arrays y mapas para su uso con las clases contenedoras de Qt, como QMap y QList, por lo que no es necesario escribir las funciones del operador de flujo para ellas. Para estructuras Qt proporciona especializaciones genéricas mapeando hacia y desde std::tuple. Para usar un tipo personalizado en su lugar o para otros tipos los operadores tienen que ser implementados explícitamente.

Consulte la documentación de QDBusArgument para ver ejemplos de estructuras, matrices y mapas.

El sistema de tipos en uso

Todos los tipos de Qt D-Bus (primitivos y definidos por el usuario) pueden utilizarse para enviar y recibir mensajes de todo tipo a través del bus.

Advertencia: No puedes usar ningún tipo que no esté en la lista anterior, incluyendo typedefs a los tipos listados. Esto también incluye QList<QVariant> y 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.