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
字符串
变体
对象路径
签名
除了基本类型外,QDBusArgument 还原生支持两种非基本类型,因为它们在 Qt 应用程序中广泛使用:QStringList 和 QByteArray。
复合类型¶
D-Bus 指定了三种基本类型的聚合方式,允许创建复合类型。它们是 ARRAY、STRUCT 和映射/字典。
数组是零个或多个相同类型元素的集合,而结构体是固定数量元素的集合,每个元素可以是任何类型。映射或字典被实现为一对元素的数组,因此一个映射中可以有零个或多个元素。
扩展类型系统¶
为了在Qt D-Bus中使用自己的类型,必须使用Q_DECLARE_METATYPE()宏将该类型声明为Qt元类型,并使用qDBusRegisterMetaType()函数进行注册。注册系统会自动找到流操作符operator>>和operator<<。
Qt D-Bus 为数组和映射提供了模板特化,以便与 Qt 的容器类(如 QMap 和 QList)一起使用,因此不需要为这些类编写流操作符函数。对于其他类型,特别是实现结构的类型,必须显式实现操作符。
请参阅QDBusArgument的文档,了解结构、数组和映射的示例。
使用中的类型系统¶
所有的Qt D-Bus类型(包括基本类型和用户定义类型)都可以用于在总线上发送和接收各种类型的消息。
警告
您不能使用上述列表中未包含的任何类型,包括对列出的类型的typedefs。这也包括QList