Qt D-Bus 类型系统

D-Bus 拥有一个基于一些基本类型和这些基本类型在数组和结构中的组合的可扩展类型系统。Qt D-Bus 通过 QDBusArgument 类实现了对该类型系统的接口,允许用户程序通过总线发送和接收几乎所有的 C++ 类型。

原始类型

原始类型由QDBusArgument原生支持,无需特殊定制即可发送或接收。它们如下所示,以及它们相关的C++类:

Qt 类型

D-Bus 等效类型

uchar

BYTE

布尔

布尔型

短整型

INT16

ushort

UINT16

整数

INT32

无符号整数

UINT32

qlonglong

INT64

qulonglong

UINT64

双精度

DOUBLE

QString

字符串

QDBusVariant

变体

QDBusObjectPath

对象路径

QDBusSignature

签名

除了基本类型外,QDBusArgument 还原生支持两种非基本类型,因为它们在 Qt 应用程序中广泛使用:QStringList 和 QByteArray。

复合类型

D-Bus 指定了三种基本类型的聚合方式,允许创建复合类型。它们是 ARRAYSTRUCT 和映射/字典。

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

扩展类型系统

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

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

请参阅QDBusArgument的文档,了解结构、数组和映射的示例。

使用中的类型系统

所有的Qt D-Bus类型(包括基本类型和用户定义类型)都可以用于在总线上发送和接收各种类型的消息。

警告

您不能使用上述列表中未包含的任何类型,包括对列出的类型的typedefs。这也包括QList和QMap