Spec-Zone.ru › Qt 5.15

Класс QDBusPendingReply

шаблон <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> class QDBusPendingReply

Класс QDBusPendingReply содержит ответ на асинхронный вызов метода. Подробнее...

Заголовок: #include <QDBusPendingReply>
qmake: QT += dbus
С момента: Qt 4.5
Наследует: QDBusPendingCall

Этот класс был представлен в Qt 4.5.

  • Список всех членов, включая унаследованные

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

Перечисление anonymous { Count }

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

QDBusPendingReply(const QDBusMessage &message)
QDBusPendingReply(const QDBusPendingCall &call)
QDBusPendingReply(const QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &other)
QDBusPendingReply()
QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> & operator=(const QDBusMessage &message)
QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> & operator=(const QDBusPendingCall &call)
QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> & operator=(const QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &other)
QVariant argumentAt(int index) const
int count() const
QDBusError error() const
bool isError() const
bool isFinished() const
bool isValid() const
QDBusMessage reply() const
T1 value() const
void waitForFinished()
T1 operator T1() const

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

QDBusPendingReply — это шаблонный класс с максимальными 8 параметрами шаблона. Эти параметры — типы, которые будут использованы для извлечения содержимого данных ответа.

Этот класс похож по функциональности на QDBusReply, но с двумя важными отличиями:

  • QDBusReply принимает ровно один тип возвращаемого значения, в то время как QDBusPendingReply может иметь от 1 до 8 типов
  • QDBusReply работает только с уже завершенными ответами, в то время как QDBusPendingReply позволяет дождаться ответов от ожидающих вызовов

Где с QDBusReply вы бы написали:

QDBusReply<QString> reply = interface->call("RemoteMethod");
if (reply.isValid())
    // use the returned value
    useValue(reply.value());
else
    // call failed. Show an error condition.
    showError(reply.error());

с QDBusPendingReply, эквивалентный код (включая блокирующее ожидание ответа) был бы:

    QDBusPendingReply<QString> reply = interface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (reply.isError())
        // call failed. Show an error condition.
        showError(reply.error());
    else
        // use the returned value
        useValue(reply.value());

Для вызовов методов, имеющих более одного выходного аргумента, с QDBusReply, вы бы написали:

QString reply = interface->call("RemoteMethod");

в то время как с QDBusPendingReply все выходные аргументы должны быть параметрами шаблона:

    QDBusPendingReply<bool, QString> reply = interface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (!reply.isError()) {
        if (reply.argumentAt<0>())
            showSuccess(reply.argumentAt<1>());
        else
            showFailure(reply.argumentAt<1>());
    }

Объекты QDBusPendingReply могут быть связаны с объектами QDBusPendingCallWatcher, которые излучают сигналы при поступлении ответа.

См. также QDBusPendingCallWatcher и QDBusReply.

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

Перечисление QDBusPendingReply::anonymous

Постоянная Значение Описание
QDBusPendingReply::Count ForEach::Total Количество аргументов, ожидаемых в ответе

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

QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)

Создаёт объект QDBusPendingReply, который будет получать своё содержимое из сообщения message. В этом случае, этот объект уже будет в завершенном состоянии, и содержимое ответа будет доступно.

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

QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)

Создаёт объект QDBusPendingReply, который будет получать своё содержимое из ожидающего асинхронного вызова call. Этот объект QDBusPendingReply будет использовать ту же ссылку на ожидающий вызов, что и call.

QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &other)

Создаёт копию объекта QDBusPendingReply other. Как и QDBusPendingCall и QDBusPendingCallWatcher, этот объект QDBusPendingReply будет использовать ту же ссылку на ожидающий вызов. Все копии используют те же значения возвращаемых данных.

QDBusPendingReply::QDBusPendingReply()

Создаёт пустой объект QDBusPendingReply. Без присвоения объекта QDBusPendingCall этому ответу, QDBusPendingReply не может ничего сделать. Все функции возвращают свои значения ошибки.

QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &QDBusPendingReply::operator=(const QDBusMessage &message)

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

После завершения этой функции, объект QDBusPendingReply будет в «завершенном» состоянии, и содержимое message будет доступно.

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

QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &QDBusPendingReply::operator=(const QDBusPendingCall &call)

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

QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &QDBusPendingReply::operator=(const QDBusPendingReply<T1, T2, T3, T4, T5, T6, T7, T8> &other)

Создает копию other и удаляет ссылку на текущий ожидающий вызов. Если текущая ссылка указывает на незавершенный ожидающий вызов и это последняя ссылка, ожидающий вызов будет отменен, и не будет возможности получить содержимое ответа, когда оно прибудет.

QVariant QDBusPendingReply::argumentAt(int index) const

Возвращает аргумент по позиции index в содержимом ответа. Если ответ не содержит такого количества элементов, поведение функции не определено (вероятно, вызовет ошибку проверки), поэтому важно убедиться, что обработка завершена и ответ валиден.

Если ответ не содержит аргумент по позиции index или если ответ был ошибкой, эта функция возвращает недействительный QVariant. Поскольку сообщения D-Bus никогда не могут содержать недействительные QVariants, это возвращаемое значение может использоваться для определения ошибки.

int QDBusPendingReply::count() const

Возвращает количество аргументов, которые должен содержать ответ. Это число соответствует количеству непустых шаблонов-параметров в этом классе.

Если ответ приходит с другим количеством аргументов (или с другими типами), он будет преобразован в ответ об ошибке, указывающий на неправильную подпись.

QDBusError QDBusPendingReply::error() const

Возвращает содержимое ошибки сообщения ответа, если обработка завершена. Если обработка сообщения ответа не завершена или если сообщение содержит нормальный ответ (без ошибки), функция возвращает недействительный QDBusError.

bool QDBusPendingReply::isError() const

Возвращает true если ответ содержит сообщение об ошибке, false, если содержит нормальный ответ на метод.

Если ожидающий вызов не завершен, функция также возвращает true.

bool QDBusPendingReply::isFinished() const

Возвращает true если ожидающий вызов завершен и ответ получен. Если функция возвращает true, методы isError(), error() и reply() должны возвращать корректную информацию.

Обратите внимание, что состояние изменяется только при вызове waitForFinished() или при внешнем событии D-Bus, которое, как правило, происходит только при возвращении в цикл обработки событий.

См. также QDBusPendingCallWatcher::isFinished().

bool QDBusPendingReply::isValid() const

Возвращает true если ответ содержит нормальное сообщение ответа, false, если содержит что-либо другое.

Если ожидающий вызов не завершен, функция возвращает false.

QDBusMessage QDBusPendingReply::reply() const

Возвращает сообщение ответа, полученное для асинхронного вызова, если обработка завершена. Если ожидающий вызов не завершен, эта функция возвращает QDBusMessage типа QDBusMessage::InvalidMessage.

После завершения обработки тип сообщения будет либо сообщением об ошибке, либо обычным сообщением ответа на метод.

T1 QDBusPendingReply::value() const

Возвращает первый аргумент в этом ответе, отформатированный как тип T1 (первый шаблонный параметр этого класса). Эквивалентно вызову argumentAt<0>().

Эта функция предоставлена для удобства, соответствуя функции QDBusReply::value().

Обратите внимание, что если ответ еще не пришёл, эта функция блокирует вызывающую нить до обработки ответа.

Если ответ является ответом об ошибке, эта функция возвращает объект T1, созданный по умолчанию, который может быть неотличим от действительного значения. Для надёжной проверки того, было ли сообщение ошибкой, используйте isError().

void QDBusPendingReply::waitForFinished()

Приостанавливает выполнение вызывающей нити до получения и обработки ответа. После возврата этой функции isFinished() должна вернуть true, что указывает на готовность содержимого ответа для обработки.

См. также QDBusPendingCallWatcher::waitForFinished().

T1 QDBusPendingReply::operator T1() const

Возвращает первый аргумент в этом ответе, отформатированный как тип T1 (первый шаблонный параметр этого класса). Эквивалентно вызову argumentAt<0>().

Эта функция предоставлена для удобства, соответствуя функции QDBusReply::value().

Обратите внимание, что если ответ ещё не пришёл, эта функция блокирует вызывающую нить до обработки ответа.

Если ответ является ответом об ошибке, эта функция возвращает объект T1, созданный по умолчанию, который может быть неотличим от действительного значения. Для надёжной проверки того, было ли сообщение ошибкой, используйте isError().

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

Spec-Zone.ru

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