このページでは

Qt D-Bus の型システム

D-Bus には、いくつかのプリミティブ型と、配列や構造体におけるそれらの組み合わせに基づく、拡張可能な型システムがあります。Qt D-Bus は、QDBusArgument クラスを介してその型システムへのインターフェースを実装しており、これにより、ユーザープログラムはバスを介して事実上あらゆる C++ 型を送受信できるようになります。

プリミティブ型

プリミティブ型はQDBusArgument によってネイティブにサポートされており、送受信するために特別なカスタマイズは必要ありません。以下に、それらが対応するC++クラスとともに一覧を示します。

Qt 型D-Bus における対応する型
ucharBYTE
BYTEBOOLEAN
shortINT16
ushortUINT16
intINT32
uintUINT32
qlonglongINT64
qulonglongUINT64
doubleDOUBLE
QStringSTRING
QDBusVariantVARIANT
QDBusObjectPathOBJECT_PATH
QDBusSignatureSIGNATURE

プリミティブ型とは別に、QDBusArgument は、Qt アプリケーションで広く使用されているため、QStringList およびQByteArray という 2 つの非プリミティブ型もネイティブでサポートしています。

複合型

D-Bus では、複合型を作成できる 3 種類のプリミティブ型の集合が規定されています。それらは、ARRAY 、STRUCT 、およびマップ/辞書です。

配列は、同じ型の要素を0個以上含む集合であるのに対し、構造体は、各要素の型は任意であるが、要素の数が固定された集合である。マップまたはディクショナリは、要素のペアからなる配列として実装されているため、1つのマップには0個以上の要素を含めることができる。

型システムの拡張

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

Qt D-Bus QMap やQListといったQtのコンテナクラスで使用するための、配列およびマップ向けのテンプレート特化形が提供されているため、これらについてはストリーミング演算子関数を記述する必要はありません。構造体については、Qtは との相互変換を行う汎用特化形を提供しています。代わりにカスタム型を使用する場合や、その他の型に対しては、演算子を明示的に実装する必要があります。std::tuple

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

使用中の型システム

Qt D-Bus のすべての型(プリミティブ型およびユーザー定義型を問わず)は、バスを介してあらゆる型のメッセージを送受信するために使用できます。

警告: 上記のリストにない型(typedefs を含む)は 一切使用できません 。これには、QList<QVariant> およびQMap<QString,QVariant> も含まれます。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.