Qt D-Bus 型システム

D-Bus は、いくつかのプリミティブと、配列や構造体におけるプリミティブのコンポジションに基づいた拡張可能な型システムを持っています。Qt D-Bus は、QDBusArgument クラスを通して、この型システムへのインタフェースを実装しており、ユーザープログラムは、バス上で実質的にすべての C++ 型を送受信することができます。

プリミティブ型

プリミティブ型はQDBusArgument でネイティブにサポートされており、送受信に特別なカスタマイズは必要ありません。以下に、関連する C++ クラスを示します:

Qt 型D-Bus 等価型
ucharBYTE
ブールブール
ショートINT16
ushortUINT16
intINT32
uintUINT32
qlonglongINT64
クロロングUINT64
doubleDOUBLE
QString文字列
QDBusVariantバリアント
QDBusObjectPathオブジェクトパス
QDBusSignatureシグネチャ

プリミティブ型の他に、QDBusArgument は、Qt アプリケーションで広く使われていることから、2 つの非プリミティブ型もネイティブでサポートしています:QStringListQByteArray

複合型

D-Busはプリミティブ型の集約を3種類規定しており、複合型を作成することができます。これらは、ARRAYSTRUCT 、マップ/辞書です。

配列は同じ型の0個以上の要素からなる集合であり、構造体は任意の型の固定数の要素からなる集合である。マップや辞書は要素のペアの配列として実装されるため、1つのマップに0個以上の要素を含めることができます。

型システムの拡張

Qt D-Bus で独自の型を使用するには、Q_DECLARE_METATYPE() マクロで Qt メタ型として宣言し、qDBusRegisterMetaType() 関数で登録する必要があります。ストリーミング演算子operator>>operator<< は、登録システムによって自動的に検出されます。

Qt D-Bus は、QMapQList のような Qt のコンテナ・クラスで使用するための、配列とマップのテンプレート特殊化を提供します。その他の型、特に構造体を実装した型については、演算子を明示的に実装する必要があります。

構造体、配列、マップの例については、QDBusArgument のドキュメントを参照してください。

使用される型システム

Qt D-Bus のすべての型(プリミティブもユーザー定義も同様)は、バス上ですべての型のメッセージを送受信するために使用することができます。

警告 typedefs を含め、上記のリストにない型を使用することはできません。これにはQList<QVariant> やQMap<QString,QVariant> も含まれます。

©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。