Qt D-Bus 类型系统

Qt D-Bus 通过QDBusArgument 类实现了该类型系统的接口,允许用户程序通过总线发送和接收几乎所有的 C++ 类型。

基元类型

QDBusArgument 本机支持原始类型,无需特别定制即可发送或接收。下面列出了这些类型及其相关的 C++ 类:

Qt 类型D-Bus 对等类型
字符串字节
boolBOOLEAN
shortINT16
ushortUINT16
intINT32
uintUINT32
qlonglongINT64
qulonglongUINT64
DOUBLE
QString字符串
QDBusVariant变量
QDBusObjectPath对象路径
QDBusSignature签名

除了基元类型外,QDBusArgument 还原生支持两种非基元类型,这是因为它们在 Qt XML 应用程序中被广泛使用:QStringListQByteArray

复合类型

D-Bus 规定了三种原始类型的聚合,允许创建复合类型。它们是ARRAYSTRUCT 和地图/字典。

数组是由相同类型的零个或多个元素组成的集合,而结构是由固定数量的元素组成的集合,每个元素的类型不限。映射或字典是作为一对元素的数组实现的,因此一个映射中可以有零个或多个元素。

扩展类型系统

要在Qt D-Bus 中使用自己的类型,必须使用Q_DECLARE_METATYPE() 宏将该类型声明为 Qt 元类型,并使用qDBusRegisterMetaType() 函数注册。注册系统会自动找到流运算符operator>>operator<<

Qt D-Bus Qt XML 为数组和映射提供了模板特化,以便与 Qt 的容器类(如 和 )一起使用,因此无需为这些QMap QList容器类编写流运算符函数。对于其他类型,特别是实现结构的类型,必须明确实现操作符。

有关结构、数组和映射的示例,请参见QDBusArgument 文档。

使用中的类型系统

所有Qt D-Bus 类型(基元类型和用户自定义类型)都可用于通过总线发送和接收所有类型的信息。

警告 不得使用上述列表之外的任何类型,包括typedefs 。这也包括QList<QVariant> 和QMap<QString,QVariant>。

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