Spec-Zone.ru › Qt 5.6

Класс QDBusArgument

Класс QDBusArgument используется для машарлинга и демаршарлинга аргументов D-Bus. Подробнее...

Заголовок: #include <QDBusArgument>
qmake: QT += dbus
С тех пор: Qt 4.2
  • Список всех членов, включая унаследованные

Открытые типы

перечисление ElementType { BasicType, VariantType, ArrayType, StructureType, ..., UnknownType }

Открытые функции

… (rest of the table, translated similarly)
QDBusArgument()
QDBusArgument(const QDBusArgument &other)
QDBusArgument(QDBusArgument &&other)
~QDBusArgument()
QVariant asVariant() const
bool atEnd() const
void beginArray(int id)
void beginArray() const
void beginMap(int kid, int vid)
void beginMap() const
void beginMapEntry()
void beginMapEntry() const
void beginStructure()
void beginStructure() const
ElementType currentType() const
void endArray()
void endArray() const

Связанные нечлены

int qDBusRegisterMetaType()
T qdbus_cast(const QDBusArgument &argument)

Подробное описание

Класс QDBusArgument используется для маппинга и демаппинга аргументов D-Bus.

Класс используется для отправки аргументов по D-Bus удалённым приложениям и для получения их обратно. D-Bus предлагает расширяемую систему типов, основанную на нескольких примитивных типах и их ассоциациях. Для получения дополнительной информации о системе типов см. страницу Qt D-Bus Type System.

QDBusArgument — это центральный класс в системе типов Qt D-Bus, предоставляющий функции для маппинга и демаппинга примитивных типов. Сложные типы затем создаются путём объединения одного или нескольких примитивных типов в массивы, словари или структуры.

Следующий пример иллюстрирует, как можно создать структуру, содержащую целое число и строку, используя Qt D-Bus type system:

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;
}

Тип необходимо зарегистрировать с помощью qDBusRegisterMetaType() перед его использованием с QDBusArgument. Поэтому где-то в вашей программе вам следует добавить следующий код:

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().

Документация по типам членов

перечисление QDBusArgument::ElementType

Это перечисление описывает тип элемента, содержащегося в аргументе.

Константа Значение Описание
QDBusArgument::BasicType 0 Основной элемент, который понимается QVariant. К основным типам относятся: bool, byte, short, ushort, int, uint, qint64, quint64, double, QString, QByteArray, QDBusObjectPath, QDBusSignature
QDBusArgument::VariantType 1 Элемент варианта (QDBusVariant)
QDBusArgument::ArrayType 2 Элемент массива, обычно представленный QList<T> или QVector<T>. Примечание: QByteArray и ассоциативные отображения не считаются массивами, даже если протокол D-Bus их транспортирует как таковые.
QDBusArgument::StructureType 3 Пользовательский тип, представленный структурой, такой как QDateTime, QPoint и т. д.
QDBusArgument::MapType 4 Ассоциативный контейнер, такой как QMap<Key, Value> или QHash<Key, Value>
QDBusArgument::MapEntryType 5 Одна запись в ассоциативном контейнере: и ключ, и значение образуют один тип записи отображения.
QDBusArgument::UnknownType -1 Тип неизвестен или мы достигли конца списка.

Это перечисление было введено или изменено в Qt 4.5.

См. также currentType().

Документация по функциям членов

QDBusArgument::QDBusArgument()

Создаёт пустой аргумент QDBusArgument.

Пустой объект QDBusArgument не позволяет выполнять чтение или запись.

QDBusArgument::QDBusArgument(const QDBusArgument &other)

Создаёт копию объекта QDBusArgument other.

Поэтому оба объекта с этого момента будут содержать одинаковое состояние. QDBusArguments явно разделяются, и поэтому любые изменения в любой копии повлияют и на другую.

QDBusArgument::QDBusArgument(QDBusArgument &&other)

Конструктор копирования перемещения.

QDBusArgument::~QDBusArgument()

Удаляет ресурсы, связанные с этим объектом QDBusArgument.

QVariant QDBusArgument::asVariant() const

Возвращает текущий аргумент в виде QVariant. Примитивные типы будут декодированы и возвращены в QVariant, но для сложных типов эта функция вернёт объект QDBusArgument в QVariant. Ответственность за декодирование аргумента лежит на вызывающей стороне (например, путём вызова asVariant() в нём).

Например, если текущий аргумент — INT32, эта функция вернёт QVariant с аргументом типа QVariant::Int. Для массива INT32 она вернёт QVariant, содержащий QDBusArgument.

Если произошла ошибка или если больше нет аргументов для декодирования (т. е. мы достигли конца списка аргументов), эта функция вернёт недопустимый QVariant.

Эта функция была введена в Qt 4.5.

См. также atEnd().

bool QDBusArgument::atEnd() const

Возвращает true , если нет больше элементов для извлечения из QDBusArgument. Эта функция обычно используется в объектах QDBusArgument, возвращаемых beginMap() и beginArray().

void QDBusArgument::beginArray(int id)

Открывает новый массив D-Bus, подходящий для добавления элементов типа id.

Эта функция обычно используется в операторах потоковой передачи operator<<, как в следующем примере:

// append an array of MyElement types
QDBusArgument &operator<<(QDBusArgument &argument, const MyArray &myarray)
{
    argument.beginArray( qMetaTypeId<MyElement>() );
    for ( int i = 0; i < myarray.length; ++i )
        argument << myarray.elements[i];
    argument.endArray();
    return argument;
}

Если тип, который вы хотите поместить в массив, это QList, QVector или любой из контейнеров Qt, принимающий один параметр шаблона, вам не нужно объявлять функцию operator<<, так как Qt D-Bus предоставляет общие шаблоны для выполнения маппинга данных. То же самое относится к контейнерам последовательностей STL, таким как std::list, std::vector, и т.д.

См. также endArray(), beginStructure(), и beginMap().

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, QVector или любой из контейнеров Qt, принимающий один параметр шаблона, вам не нужно объявлять функцию operator>>, так как Qt D-Bus предоставляет общие шаблоны для выполнения демаппинга данных. То же самое относится к контейнерам последовательностей STL, таким как std::list, std::vector, и т.д.

См. также atEnd(), beginStructure(), и beginMap().

void QDBusArgument::beginMap(int kid, int vid)

Открывает новую карту D-Bus, подходящую для добавления элементов. Карты — это контейнеры, которые связывают одну запись (ключ) с другой (значение), такие как QMap или QHash Qt. Идентификаторы метатипов ключа и значения карты должны быть переданы в kid и vid соответственно.

Эта функция обычно используется в операторах потоковой передачи operator<<, как в следующем примере:

// append a dictionary that associates ints to MyValue types
QDBusArgument &operator<<(QDBusArgument &argument, const MyDictionary &mydict)
{
    argument.beginMap( QVariant::Int, qMetaTypeId<MyValue>() );
    for ( int i = 0; i < mydict.length; ++i ) {
        argument.beginMapEntry();
        argument << mydict.data[i].key << mydict.data[i].value;
        argument.endMapEntry();
    }
    argument.endMap();
    return argument;
}

Если тип, который вы хотите поместить в карту, это QMap или QHash, вам не нужно объявлять функцию operator<<, так как Qt D-Bus предоставляет общие шаблоны для выполнения маппинга данных.

См. также endMap(), beginStructure(), beginArray(), и beginMapEntry().

void QDBusArgument::beginMap() const

Входит в карту D-Bus, чтобы позволить извлечение элементов карты.

Эта функция обычно используется в операторах потоковой передачи operator>>, как в следующем примере:

// extract a MyDictionary map that associates ints to MyValue elements
const QDBusArgument &operator>>(const QDBusArgument &argument, MyDictionary &mydict)
{
    argument.beginMap();
    mydict.clear();

    while ( !argument.atEnd() ) {
        int key;
        MyValue value;
        argument.beginMapEntry();
        argument >> key >> value;
        argument.endMapEntry();
        mydict.append( key, value );
    }

    argument.endMap();
    return argument;
}

Если тип, который вы хотите демаршаллировать, — это QMap или QHash, вам не нужно объявлять функцию 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().

ElementType QDBusArgument::currentType() const

Возвращает классификацию текущего типа элемента. Если при декодировании типа возникает ошибка или если мы достигли конца аргумента, эта функция возвращает QDBusArgument::UnknownType.

Эта функция имеет смысл только при демаршаллировании аргументов. Если она используется при маршаллировании, она всегда возвращает UnknownType.

Эта функция была добавлена в Qt 4.5.

void QDBusArgument::endArray()

Закрывает массив D-Bus, открытый с помощью beginArray(). Эта функция должна вызываться такое же количество раз, что и beginArray().

См. также beginArray(), endStructure() и endMap().

void QDBusArgument::endArray() const

Закрывает массив D-Bus и разрешает извлечение следующего элемента после массива.

См. также beginArray().

void QDBusArgument::endMap()

Закрывает карту D-Bus, открытую с помощью beginMap(). Эта функция должна вызываться такое же количество раз, что и beginMap().

См. также beginMap(), endStructure() и endArray().

void QDBusArgument::endMap() const

Закрывает карту D-Bus и разрешает извлечение следующего элемента после карты.

См. также beginMap().

void QDBusArgument::endMapEntry()

Закрывает запись D-Bus-карты, открытую с помощью beginMapEntry(). Эта функция должна вызываться такое же количество раз, что и beginMapEntry().

См. также beginMapEntry().

void QDBusArgument::endMapEntry() const

Закрывает запись D-Bus-карты и разрешает извлечение следующего элемента в карте.

См. также beginMapEntry().

void QDBusArgument::endStructure()

Закрывает структуру D-Bus, открытую с помощью beginStructure(). Эта функция должна вызываться такое же количество раз, что и beginStructure().

См. также beginStructure(), endArray() и endMap().

void QDBusArgument::endStructure() const

Закрывает структуру D-Bus и разрешает извлечение следующего элемента после структуры.

См. также beginStructure().

void QDBusArgument::swap(QDBusArgument &other)

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

Добавляет примитивное значение arg типа BYTE в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа BOOLEAN в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа INT16 в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа UINT16 в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа INT32 в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа UINT32 в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа INT64 в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа UINT64 в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа DOUBLE (двойная точность с плавающей запятой) в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа STRING (строка Unicode) в поток D-Bus.

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

Это перегруженная функция.

Добавляет примитивное значение arg типа VARIANT в поток D-Bus.

Тип D-Bus-варианта может содержать любой тип, включая другие варианты. Он аналогичен типу Qt QVariant.

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

Это перегруженная функция.

Добавляет QStringList, заданный параметром arg, как ARRAY of STRING в поток D-Bus.

QStringList и QByteArray — единственные два не-примитивных типа, которые напрямую поддерживаются QDBusArgument из-за их широкого использования в приложениях Qt.

Другие массивы поддерживаются с помощью составных типов в Qt D-Bus.

END_OF_DOCUMENT_MARKER

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

Это перегруженный функцией.

Добавляет QByteArray, заданную arg, как ARRAY of BYTE в поток D-Bus.

QStringList и QByteArray — единственные два не-примитивных типа, напрямую поддерживаемые QDBusArgument из-за их широкого использования в приложениях Qt.

Другие массивы поддерживаются с помощью составных типов в Qt D-Bus.

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

Оператор перемещающего присваивания.

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

Копирует объект other QDBusArgument в этот.

Таким образом, оба объекта будут содержать одинаковое состояние от этого момента. QDBusArgument явно разделяются, и поэтому любое изменение любой копии повлияет на другую тоже.

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

Извлекает один примитивный аргумент D-BUS типа BYTE из потока D-BUS и помещает его в arg.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа BOOLEAN из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа INT16 из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа UINT16 из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа INT32 из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа UINT32 из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа INT64 из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа UINT64 из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа DOUBLE (число с плавающей запятой двойной точности) из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа STRING (строка Unicode) из потока D-Bus.

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

Это перегруженный функцией.

Извлекает один примитивный аргумент D-Bus типа VARIANT из потока D-Bus.

Тип варианта D-Bus может содержать любой тип, включая другие варианты. Он похож на тип Qt QVariant.

В случае, если вариант содержит тип, не поддерживаемый напрямую QDBusArgument, значение возвращаемого QDBusVariant будет содержать другой QDBusArgument. Вам необходимо дополнительно размаршалить его в другой тип.

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

Это перегруженный функцией.

Извлекает массив строк из потока D-Bus и возвращает его как QStringList.

QStringList и QByteArray — единственные два не-примитивных типа, напрямую поддерживаемые QDBusArgument из-за их широкого использования в приложениях Qt.

Другие массивы поддерживаются с помощью составных типов в Qt D-Bus.

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

Это перегруженный функцией.

Извлекает массив байтов из потока D-Bus и возвращает его как QByteArray.

QStringList и QByteArray — единственные два не-примитивных типа, напрямую поддерживаемые QDBusArgument из-за их широкого использования в приложениях Qt.

Другие массивы поддерживаются с помощью составных типов в Qt D-Bus.

Связанные внешние члены

int qDBusRegisterMetaType()

Регистрирует T в Qt D-Bus Type System и Qt системе мета-типов, если она ещё не зарегистрирована.

Чтобы зарегистрировать тип, он должен быть объявлен как мета-тип с макросом Q_DECLARE_METATYPE(), а затем зарегистрирован как в следующем примере:

#include <QDBusMetaType>
qDBusRegisterMetaType<MyClass>();

Если T не является типом, производным от одного из контейнерных классов Qt, операторы потоковой передачи operator<< и operator>> между T и QDBusArgument должны быть уже объявлены. Дополнительную информацию о том, как объявлять такие типы, см. на странице Qt D-Bus Type System.

Эта функция возвращает идентификатор метатипа Qt для типа (то же значение, что возвращается из qRegisterMetaType()).

Примечание: Эта функция безопасна для потоков.

Эта функция была введена в Qt 4.2.

См. также Qt D-Bus Type System, qRegisterMetaType() и QMetaType.

T qdbus_cast(const QDBusArgument &argument)

Попытка размаршалить содержимое argument в тип T. Например:

MyType item = qdbus_cast<Type>(argument);

Обратите внимание, что это эквивалентно следующему:

MyType item;
argument >> item;

Эта функция была введена в Qt 4.2.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qdbusargument.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API