天天看點

Qt D-Bus 類型系統基本類型複合類型類型系統擴充類型系統使用

       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

繼續閱讀