Spec-Zone.ru › Qt 5.13

Класс 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 и QDBusAbstractInterface::asyncCall.

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

Перечисление 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 никогда не могут содержать недействительные QVariant, это возвращаемое значение может использоваться для обнаружения ошибки.

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.13/qdbuspendingreply.html

Spec-Zone.ru

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