QDBusArgument Class

QDBusArgumentクラスは、D-Bus引数のマーシャルとデマーシャルに使用されます。詳細...

ヘッダー #include <QDBusArgument>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus

パブリックな型

enum ElementType { BasicType, VariantType, ArrayType, StructureType, MapType, …, UnknownType }

パブリック関数

QDBusArgument()
QDBusArgument(const QDBusArgument &other)
~QDBusArgument()
QVariant asVariant() const
bool atEnd() const
void beginArray() const
void beginArray(QMetaType id)
void beginMap() const
void beginMap(QMetaType keyMetaType, QMetaType valueMetaType)
void beginMapEntry()
void beginMapEntry() const
void beginStructure()
void beginStructure() const
QDBusArgument::ElementType currentType() const
void endArray()
void endArray() const
void endMap()
void endMap() const
void endMapEntry()
void endMapEntry() const
void endStructure()
void endStructure() const
void swap(QDBusArgument &other)
QDBusArgument &operator<<(uchar arg)
QDBusArgument &operator<<(bool arg)
QDBusArgument &operator<<(const QByteArray &arg)
QDBusArgument &operator<<(const QDBusVariant &arg)
QDBusArgument &operator<<(const QString &arg)
QDBusArgument &operator<<(const QStringList &arg)
QDBusArgument &operator<<(double arg)
QDBusArgument &operator<<(int arg)
QDBusArgument &operator<<(qlonglong arg)
QDBusArgument &operator<<(qulonglong arg)
QDBusArgument &operator<<(short arg)
QDBusArgument &operator<<(uint arg)
QDBusArgument &operator<<(ushort arg)
QDBusArgument &operator=(const QDBusArgument &other)
const QDBusArgument &operator>>(uchar &arg) const
const QDBusArgument &operator>>(QByteArray &arg) const
const QDBusArgument &operator>>(QDBusVariant &arg) const
const QDBusArgument &operator>>(QString &arg) const
const QDBusArgument &operator>>(QStringList &arg) const
const QDBusArgument &operator>>(bool &arg) const
const QDBusArgument &operator>>(double &arg) const
const QDBusArgument &operator>>(int &arg) const
const QDBusArgument &operator>>(qlonglong &arg) const
const QDBusArgument &operator>>(qulonglong &arg) const
const QDBusArgument &operator>>(short &arg) const
const QDBusArgument &operator>>(uint &arg) const
const QDBusArgument &operator>>(ushort &arg) const
QMetaType qDBusRegisterMetaType()
T qdbus_cast(const QDBusArgument &arg)

詳細説明

このクラスは、D-Busを介してリモート・アプリケーションに引数を送信し、それを受信するために使用されます。D-Busは、いくつかのプリミティブ型とその関連付けに基づく拡張可能な型システムを提供しています。型システムの詳細については、Qt D-Bus 型システムのページを参照してください。

QDBusArgumentはQt D-Bus 型システムの中心的なクラスで、プリミティブ型をマーシャルおよびデマーシャルする関数を提供します。次に、1 つ以上のプリミティブ型を配列、ディクショナリ、または構造体に関連付けることで、複合型が作成されます。

次の例は、Qt D-Busシステムを使用して、整数と文字列を含む構造体を構築する方法を示している:

struct MyStructure
{
    int count;
    QString name;

    // ...
};
Q_DECLARE_METATYPE(MyStructure)

// Marshall the MyStructure data into a D-Bus argument
QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &myStruct)
{
    argument.beginStructure();
    argument << myStruct.count << myStruct.name;
    argument.endStructure();
    return argument;
}

// Retrieve the MyStructure data from the D-Bus argument
const QDBusArgument &operator>>(const QDBusArgument &argument, MyStructure &myStruct)
{
    argument.beginStructure();
    argument >> myStruct.count >> myStruct.name;
    argument.endStructure();
    return argument;
}

型は、QDBusArgument で使用する前にqDBusRegisterMetaType() で登録する必要があります。したがって、プログラムのどこかに以下のコードを追加してください:

qDBusRegisterMetaType<MyStructure>();

一度登録された型は、発信メソッド呼び出し(QDBusAbstractInterface::call()で配置)、登録されたオブジェクトからのシグナル発信、またはリモート・アプリケーションからの着信呼び出しで使用できます。

注意すべき点は、operator<<operator>> ストリーミング関数は、構造体の場合、読み込みと書き込み(マーシャリングとデマーシャリング)の両方で、常に同じ数のエントリーを生成する必要があります。

次の例は、無効なデータを含む可能性のあるクラスでのこの間違った使用法を示しています:

//bad code
    // Wrongly marshall the MyTime data into a D-Bus argument
    QDBusArgument &operator<<(QDBusArgument &argument, const MyTime &mytime)
    {
        argument.beginStructure();
        if (mytime.isValid)
            argument << true << mytime.hour
                     << mytime.minute << mytime.second;
        else
            argument << false;
        argument.endStructure();
        return argument;
    }

この例では、operator<< 関数とoperator>> 関数の両方が、異なる数の読み取り/書き込みを生成する可能性があります。これはQt D-Bus 型システムを混乱させるので避けるべきです。

QDBusAbstractInterface Qt D-Bus 型システムアダプタの使用法qdbus_cast()も参照のこと

メンバ型ドキュメント

enum QDBusArgument::ElementType

この列挙型は、引数が保持する要素のタイプを記述します。

定数説明
QDBusArgument::BasicType0QVariant によって理解される基本要素。bool, byte, short, ushort, int, uint, qint64, quint64, double,QString,QByteArray,QDBusObjectPathQDBusSignature
QDBusArgument::VariantType1バリアント要素 (QDBusVariant)
QDBusArgument::ArrayType2配列要素。通常はQList<T>で表される。注:QByteArray と連想マップは、たとえDバス・プロトコルがそのようにトランスポートしていても、配列とはみなされません。
QDBusArgument::StructureType3QDateTimeQPoint などの構造体で表現されるカスタム型。
QDBusArgument::MapType4QMap<Key, Value> やQHash<Key, Value> のような連想コンテナ。
QDBusArgument::MapEntryType5連想コンテナ内の1つのエントリ:キーと値の両方が1つのマップエントリ型を形成する。
QDBusArgument::UnknownType-1型が不明な場合、またはリストの最後に達した場合。

currentType()も参照のこと

メンバ関数ドキュメント

QDBusArgument::QDBusArgument()

空の QDBusArgument 引数を構築します。

空の QDBusArgument オブジェクトでは、読み取りも書き込みも実行できません。

QDBusArgument::QDBusArgument(const QDBusArgument &other)

other QDBusArgument オブジェクトのコピーを構築します。

したがって、この時点から両方のオブジェクトは同じ状態を含むことになります。QDBusArgumentsは明示的に共有されるため、いずれかのコピーに変更を加えると、もう一方のコピーにも影響します。

[noexcept] QDBusArgument::~QDBusArgument()

このQDBusArgument オブジェクトに関連付けられているリソースを処分します。

QVariant QDBusArgument::asVariant() const

QVariant基本型はデコードされてQVariant に返されるが、複雑な型の場合、この関数はQVariantQDBusArgument オブジェクトを返す。引数をデコードする(例えば、引数の中で asVariant() を呼び出すなど)のは呼び出し側の責任である。

例えば、現在の引数が INT32 の場合、この関数はQMetaType::Int 型の引数を持つQVariant を返します。INT32の配列の場合、この関数はQDBusArgument を含むQVariant を返す。

エラーが発生した場合、またはデコードする引数がなくなった場合(つまり、引数リストの最後 になった場合)、この関数は無効なQVariant を返します。

atEnd()も参照のこと

bool QDBusArgument::atEnd() const

このQDBusArgument から抽出する要素がなくなった場合、true を返す。この関数は通常、beginMap() およびbeginArray() から返されるQDBusArgument オブジェクトで使用される。

void QDBusArgument::beginArray() const

D-Bus 配列に再帰し、配列要素を取り出す。

この関数は通常、operator>> ストリーミング演算子で使用されます:

// Extract a MyArray array of MyElement elements
const QDBusArgument &operator>>(const QDBusArgument &argument, MyArray &myArray)
{
    argument.beginArray();
    myArray.clear();

    while (!argument.atEnd()) {
        MyElement element;
        argument >> element;
        myArray.append(element);
    }

    argument.endArray();
    return argument;
}

デマーシャリングしたい型がQList や、1つのテンプレート・パラメータを受け取る Qt のコンテナ・クラスのいずれかである場合、Qt D-Bus がデータのデマーシャリングを行う汎用テンプレートを提供しているため、operator>> 関数を宣言する必要はありません。std::liststd::vector などのSTLのシーケンス・コンテナも同様です。

atEnd()、beginStructure()、beginMap()も参照してください

void QDBusArgument::beginArray(QMetaType id)

メタ型id の要素を追加するのに適した新しい D-Bus 配列を開く。

この関数は通常、operator<< ストリーミング演算子で使用されます:

// Append an array of MyElement types
QDBusArgument &operator<<(QDBusArgument &argument, const MyArray &myArray)
{
    argument.beginArray(qMetaTypeId<MyElement>());
    for (const auto &element : myArray)
        argument << element;
    argument.endArray();
    return argument;
}

マーシャルしたい型がQList や、1つのテンプレート・パラメータを受け取る Qt のコンテナ・クラスのいずれかである場合、Qt D-Bus がデータをマーシャルするための汎用テンプレートを提供しているため、operator<< 関数を宣言する必要はありません。std::liststd::vector などのSTLのシーケンス・コンテナも同様です。

endArray()、beginStructure()、beginMap()も参照してください

void QDBusArgument::beginMap() const

D-Busマップに再帰し、マップの要素を抽出できるようにする。

この関数は通常、以下の例のように、operator>> ストリーミング演算子で使用される:

// Extract a MyDictionary map that associates integers to MyElement items
const QDBusArgument &operator>>(const QDBusArgument &argument, MyDictionary &myDict)
{
    argument.beginMap();
    myDict.clear();

    while (!argument.atEnd()) {
        int key;
        MyElement value;
        argument.beginMapEntry();
        argument >> key >> value;
        argument.endMapEntry();
        myDict.insert(key, value);
    }

    argument.endMap();
    return argument;
}

デマーシャリングしたい型がQMap またはQHash の場合、operator>> 関数を宣言する必要はありません。なぜなら、Qt D-Bus はデマーシャリングするための汎用テンプレートを提供しているからです。

endMap()、beginStructure()、beginArray()、beginMapEntry()も参照

void QDBusArgument::beginMap(QMetaType keyMetaType, QMetaType valueMetaType)

要素を追加するのに適した新しい D-Bus マップを開きます。マップは、あるエントリ(キー)と別のエントリ(値)を関連付けるコンテナで、QtのQMapQHash のようなものです。マップのキーと値のメタ型のidは、それぞれkeyMetaTypevalueMetaType で渡す必要があります。

この関数は通常、次の例のように、operator<< ストリーミング演算子で使用されます:

// Append a dictionary that associates ints to MyValue types
QDBusArgument &operator<<(QDBusArgument &argument, const MyDictionary &myDict)
{
    argument.beginMap(QMetaType::fromType<int>(), QMetaType::fromType<MyValue>());
    MyDictionary::const_iterator i;
    for (i = myDict.cbegin(); i != myDict.cend(); ++i) {
        argument.beginMapEntry();
        argument << i.key() << i.value();
        argument.endMapEntry();
    }
    argument.endMap();
    return argument;
}

QHash やstd::mapのような連想コンテナでは、operator<<operator>> 関数を用意する必要はありません。Qt D-Bus は、データをマーシャリングするための汎用テンプレートを提供しているからです。

endMap(),beginStructure(),beginArray(),beginMapEntry()も参照

void QDBusArgument::beginMapEntry()

キーと値のエントリを追加するのに適した D-Bus マップ・エントリを開く。この関数は、マップがbeginMap() でオープンされている場合にのみ有効である。

この関数の使用例については、beginMap() を参照。

endMapEntry() およびbeginMap()も参照

void QDBusArgument::beginMapEntry() const

D-Bus マップ・エントリに再帰し、キーと値のペアを抽出する。

この関数の通常の使用例についてはbeginMap() を参照のこと。

endMapEntry() およびbeginMap()も参照の こと。

void QDBusArgument::beginStructure()

新しい引数を追加するのに適した新しい D-Bus 構造体を開く。

この関数は通常、以下の例のようにoperator<< ストリーミング演算子で使用される:

QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &myStruct)
{
    argument.beginStructure();
    argument << myStruct.member1 << myStruct.member2;
    argument.endStructure();
    return argument;
}

構造体は他の構造体を含むことができるので、以下のコードも有効である:

QDBusArgument &operator<<(QDBusArgument &argument, const MyStructure &myStruct)
{
    argument.beginStructure();
    argument << myStruct.member1 << myStruct.member2;

    argument.beginStructure();
    argument << myStruct.member3.subMember1 << myStruct.member3.subMember2;
    argument.endStructure();

    argument << myStruct.member4;
    argument.endStructure();
    return argument;
}

endStructure()、beginArray()、beginMap()も参照の こと。

void QDBusArgument::beginStructure() const

要素の抽出に適した D-Bus 構造体を開く。

この関数は通常、以下の例のようにoperator>> ストリーミング演算子で使用される:

const QDBusArgument &operator>>(const QDBusArgument &argument, MyStructure &myStruct)
{
    argument.beginStructure();
    argument >> myStruct.member1 >> myStruct.member2 >> myStruct.member3;
    argument.endStructure();
    return argument;
}

endStructure()、beginArray()、beginMap()も参照の こと。

QDBusArgument::ElementType QDBusArgument::currentType() const

現在の要素タイプの分類を返す。型のデコードエラーが発生した場合、または引数の末尾にある場合、この関数はQDBusArgument::UnknownType を返します。

この関数が意味を持つのは、引数をデマーシャルするときだけです。マーシャリング中に使用すると、常にUnknownType を返します。

void QDBusArgument::endArray()

beginArray() でオープンされた D-Bus 配列を閉じる。この関数は、beginArray() と同じ回数呼び出されなければならない。

beginArray(),endStructure(),endMap()も参照

void QDBusArgument::endArray() const

D-Bus 配列を閉じ、配列の次の要素を取り出せるようにする。

beginArray()も参照

void QDBusArgument::endMap()

beginMap() でオープンされた D-Bus マップを閉じる。この関数は、beginMap() と同じ回数呼び出されなければならない。

beginMap(),endStructure(),endArray()も参照

void QDBusArgument::endMap() const

Dバス・マップを閉じ、マップの次の要素の抽出を許可する。

beginMap()も参照

void QDBusArgument::endMapEntry()

beginMapEntry() でオープンされた D-Bus マップ・エントリを閉じる。この関数は、beginMapEntry() と同じ回数呼び出されなければならない。

beginMapEntry()も参照

void QDBusArgument::endMapEntry() const

D-Bus マップ・エントリーを閉じ、マップ上の次のエレメントの抽出を許可する。

beginMapEntry()も参照

void QDBusArgument::endStructure()

beginStructure() でオープンされた D-Bus 構造体を閉じる。この関数は、beginStructure() と同じ回数呼び出されなければならない。

beginStructure()、endArray()、endMap()も参照

void QDBusArgument::endStructure() const

D-Bus 構造体を閉じ、構造体の次の要素を取り出せるようにする。

beginStructure()も参照

[noexcept] void QDBusArgument::swap(QDBusArgument &other)

この引数をother と入れ替える。この操作は非常に高速で、失敗することはない。

QDBusArgument &QDBusArgument::operator<<(uchar arg)

BYTE 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(bool arg)

これはオーバーロードされた関数である。

BOOLEAN 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(const QByteArray &arg)

これはオーバーロードされた関数である。

arg で指定されたQByteArrayARRAY of BYTE として D-Bus ストリームに追加します。

QStringList Qtアプリケーションで広く使用されているため、 で直接サポートされている非プリミティブ型は、 の2つだけです。QDBusArgument QByteArray

その他の配列は、Qt D-Bus の複合型によってサポートされています。

QDBusArgument &QDBusArgument::operator<<(const QDBusVariant &arg)

これはオーバーロードされた関数である。

VARIANT 型のプリミティブ値arg を D-Bus ストリームに追加する。

D-Busのバリアント型は、他のバリアント型を含む、任意の型を含むことができます。Qt のQVariant 型に似ています。

QDBusArgument &QDBusArgument::operator<<(const QString &arg)

これはオーバーロードされた関数である。

STRING 型(Unicode 文字列)のプリミティブ値arg を D-Bus ストリームに追加します。

QDBusArgument &QDBusArgument::operator<<(const QStringList &arg)

これはオーバーロードされた関数である。

arg で指定されたQStringListARRAY of STRING として D-Bus ストリームに追加します。

QStringList Qtアプリケーションで広く使用されているため、 で直接サポートされている非プリミティブ型は、 の2つだけです。QDBusArgument QByteArray

その他の配列は、Qt D-Bus の複合型によってサポートされています。

QDBusArgument &QDBusArgument::operator<<(double arg)

これはオーバーロードされた関数である。

DOUBLE 型(倍精度浮動小数点)のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(int arg)

これはオーバーロードされた関数である。

INT32 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(qlonglong arg)

これはオーバーロードされた関数である。

INT64 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(qulonglong arg)

これはオーバーロードされた関数である。

UINT64 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(short arg)

これはオーバーロードされた関数である。

INT16 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(uint arg)

これはオーバーロードされた関数である。

UINT32 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator<<(ushort arg)

これはオーバーロードされた関数である。

UINT16 型のプリミティブ値arg を D-Bus ストリームに追加する。

QDBusArgument &QDBusArgument::operator=(const QDBusArgument &other)

other QDBusArgument オブジェクトをこのオブジェクトにコピーする。

したがって、この時点から両方のオブジェクトは同じ状態を含むことになります。QDBusArgumentsは明示的に共有されるため、どちらかのコピーに変更を加えると、もう一方のコピーにも影響します。

const QDBusArgument &QDBusArgument::operator>>(uchar &arg) const

D-BusストリームからBYTE 型のD-Busプリミティブ引数を1つ取り出し、arg に入れる。

const QDBusArgument &QDBusArgument::operator>>(QByteArray &arg) const

これはオーバーロードされた関数である。

D-Busストリームからバイト配列を取り出し、QByteArray

QStringList と は、Qt アプリケーションで広く使用されているため、 で直接サポートされている唯一の非プリミティブ型です。QByteArray QDBusArgument

その他の配列は、Qt D-Bus の複合型によってサポートされています。

const QDBusArgument &QDBusArgument::operator>>(QDBusVariant &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからVARIANT 型の D-Bus プリミティブ引数を 1 つ取り出す。

D-Busバリアント型は、他のバリアント型を含む、任意の型を含むことができます。Qt のQVariant 型に似ています。

バリアントがQDBusArgument で直接サポートされていない型を含んでいる場合、返されるQDBusVariant の値には別のQDBusArgument が含まれます。それをさらに別の型に demarshall するのはあなたの責任です。

const QDBusArgument &QDBusArgument::operator>>(QString &arg) const

これはオーバーロードされた関数です。

D-BusストリームからSTRING (Unicode文字列)型のD-Busプリミティブ引数を1つ取り出す。

const QDBusArgument &QDBusArgument::operator>>(QStringList &arg) const

これはオーバーロードされた関数である。

D-Busストリームから文字列の配列を取り出し、QStringList

QStringList と は、Qt アプリケーションで広く使用されているため、 で直接サポートされている唯一の非プリミティブ型です。QByteArray QDBusArgument

その他の配列は、Qt D-Bus の複合型によってサポートされています。

const QDBusArgument &QDBusArgument::operator>>(bool &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからBOOLEAN 型の D-Bus プリミティブ引数を 1 つ取り出します。

const QDBusArgument &QDBusArgument::operator>>(double &arg) const

これはオーバーロードされた関数です。

D-BusストリームからDOUBLE (倍精度浮動小数点)型のD-Busプリミティブ引数を1つ取り出す。

const QDBusArgument &QDBusArgument::operator>>(int &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからINT32 型の D-Bus プリミティブ引数を 1 つ取り出します。

const QDBusArgument &QDBusArgument::operator>>(qlonglong &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからINT64 型の D-Bus プリミティブ引数を 1 つ取り出します。

const QDBusArgument &QDBusArgument::operator>>(qulonglong &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからUINT64 型の D-Bus プリミティブ引数を 1 つ取り出します。

const QDBusArgument &QDBusArgument::operator>>(short &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからINT16 型の D-Bus プリミティブ引数を 1 つ取り出します。

const QDBusArgument &QDBusArgument::operator>>(uint &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからUINT32 型の D-Bus プリミティブ引数を 1 つ取り出します。

const QDBusArgument &QDBusArgument::operator>>(ushort &arg) const

これはオーバーロードされた関数である。

D-Bus ストリームからUINT16 型の D-Bus プリミティブ引数を 1 つ取り出します。

関連する非会員

template <typename T> QMetaType qDBusRegisterMetaType()

まだ登録されていなければ、TQt D-Bus Type Systemと Qtmeta-type system に登録します。

型を登録するには、Q_DECLARE_METATYPE() マクロでメタ型として宣言し、次の例のように登録する必要があります:

#include <QDBusMetaType>

qDBusRegisterMetaType<MyClass>();

T が Qt のコンテナ・クラスの 1 つでない場合、TQDBusArgument の間のoperator<<operator>> のストリーミング演算子はすでに宣言されていなければなりません。このような型を宣言する方法の詳細については、Qt D-Bus 型システムのページを参照してください。

この関数は、型の Qt メタ型 ID を返します(qRegisterMetaType() から返される値と同じです)。

T 注意: T がストリーマブルな型(コンテナQList,QHash,QMap を含む)を継承している場合、operator<<operator>> をカスタムで用意しなくてもストリーマブルにできるという機能は、Qt 5.7 では非推奨です。診断機能はありません。Qtが提供するベースクラスのストリーム演算子に頼らず、ストリームしたいすべての型に対してこれらの演算子を常に提供する必要があります。

注意:この関数はスレッドセーフです。

Qt D-Bus Type System,qRegisterMetaType(),QMetaTypeも参照してください

template <typename T> T qdbus_cast(const QDBusArgument &arg)

arg の内容をT 型にデマーシャルの試み。例えば

MyType item = qdbus_cast<Type>(argument);

以下と等価であることに注意:

MyType item;
argument >> item;

© 2025 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.