Spec-Zone.ru › Qt 5.14

Класс 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 никогда не могут содержать недействительные 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.14/qdbuspendingreply.html

Spec-Zone.ru

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