QDBusArgument Class

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

Header: #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 Type System のページを参照してください。

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の型システムを混乱させるので、避けるべきです。

QDBusAbstractInterfaceQt D-Bus type systemUsing Adaptorsqdbus_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;
}

Demarshallしたい型がQList 、または1つのテンプレート・パラメータを取るQtのコンテナ・クラスである場合、operator>> 関数を宣言する必要はありません。STL のシーケンス・コンテナ(std::liststd::vector など)も同様です。

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 のコンテナ・クラスであれば、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 マップを開きます。マップは、1つのエントリ(キー)を別のエントリ(値)に関連付けるコンテナで、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-Bus マップを閉じ、マップの次の要素の抽出を許可する。

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)

このQDBusArgument インスタンスを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バス・ストリームに追加する。

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 アプリケーションで広く使用されているため、 で直接サポートされている唯一の非プリミティブ型です。QByteArray QDBusArgument

その他の配列は、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

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

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

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

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

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

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

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

INT64 型の D-Bus プリミティブ引数を 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 Type System のページを参照してください。

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

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

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

Qt D-Bus Type SystemqRegisterMetaType()、QMetaTypeも参照してください

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

arg の内容をT 型にデマーシャルしようとします。例えば

MyType item = qdbus_cast<Type>(argument);

以下と等価であることに注意してください:

MyType item;
argument >> item;

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