D-Bus具有可擴充的類型系統,基于基本類型和基本類型的數組和結構體這樣的組合類型。Qt D-Bus通過QDBusArgument類實作與類型系統的接口,允許使用者程式在D-Bus總線上收發幾乎所有的C++類型。
基本類型
基本類型由QDBusArgument原生支援,不需要特别定制就可以收發。他們與相關的C++類型共同列于下表:
Qt 類型 | D-Bus 等價類型 |
---|---|
uchar | BYTE |
bool | BOOLEAN |
short | INT16 |
ushort | UINT16 |
int | INT32 |
uint | UINT32 |
qlonglong | INT64 |
qulonglong | UINT64 |
double | DOUBLE |
QString | STRING |
QDBusVariant | VARIANT |
QDBusObjectPath | OBJECT_PATH |
QDBusSignature | SIGNATURE |
除了基本類型,QDBusArgument也原生支援兩個非基本類型:QStringList 和QByteArray,因為他們廣泛用于Qt應用程式。
複合類型
D-Bus指定了三種基本類型的組合類型以支援增加複合類型。他們是數組(
ARRAY
),
結構體(STRUCT)
和映射/字典 (maps/dictionaries)。
數組是0個或多個相同類型元素的集合,而結構體是固定數目元素的集合,每個元素可以是任何類型。映射或字典實作為一對元素(鍵-值對)的數組,是以,在一個映射中可以有0個或多個元素。
類型系統擴充
為了在Qt D-Bus上使用自定義類型,必須使用Q_DECLARE_METATYPE()宏将類型聲明為Qt元類型并且使用qDBusRegisterMetaType()函數注冊。流運算符
operator>>
和
operator<<會自動在注冊系統中找到。
使用Qt容器類,如QMap 和QList,Qt D-Bus會專門提供數組和映射的模闆,是以,沒必要為它們編寫流運算符函數。對于其它類型,和特别為類型實作的結構,那麼運算符必須顯示實作。
有關數組,結構體和映射的例子詳見關于QDBusArgument的文檔。
類型系統使用
所有Qt D-Bus類型(基本類型和自定義類型類似)可用于總線上所有類型消息的收發。
警告:你可能沒有使用上述的任何類型,包括所列類型的typedefs。這也包括QList<QVariant> 和QMap<QString,QVariant>。
英文原文位址: http://doc.qt.io/qt-5/qdbustypesystem.html