Spec-Zone.ru › Qt

Класс QDBusPendingReply

шаблон <typename Types> class QDBusPendingReply

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

Заголовок: #include <QDBusPendingReply>
CMake: find_package(Qt6 COMPONENTS Dbus REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::Dbus)
qmake: QT += dbus
Наследует: QDBusPendingReplyBase
  • Список всех членов, включая унаследованные

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

Перечисление безымянный { Count }

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

QDBusPendingReply(const QDBusMessage &message)
QDBusPendingReply(const QDBusPendingCall &call)
QDBusPendingReply(const QDBusPendingReply<Types...> &other)
QDBusPendingReply()
QDBusPendingReply<Types...> & operator=(const QDBusMessage &message)
QDBusPendingReply<Types...> & operator=(const QDBusPendingCall &call)
QDBusPendingReply<Types...> & operator=(const QDBusPendingReply<Types...> &other)
QVariant argumentAt(int index) const
int count() const
QDBusError error() const
bool isError() const
bool isFinished() const
bool isValid() const
QDBusMessage reply() const
typename Select<0>::Type value() const
void waitForFinished()
typename Select<0>::Type operator typename Select<0>::Type() const

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

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

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

  • QDBusReply принимает ровно один тип возвращаемого значения, а QDBusPendingReply может иметь любое количество типов.
  • 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 = iface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (reply.isError())
        // call failed. Show an error condition.
        showErrorD(reply.error());
    else
        // use the returned value
        useValue(reply.value());

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

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

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

    QDBusPendingReply<bool, QString> reply = iface->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::безымянный

Константа Значение Описание
QDBusPendingReply::Count std::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types) Количество аргументов, ожидаемых в ответе

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

QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)

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

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

QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)

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

QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)

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

QDBusPendingReply::QDBusPendingReply()

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

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)

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

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

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

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)

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

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &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.

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

typename Select<0>::Type QDBusPendingReply::value() const

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

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

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

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

void QDBusPendingReply::waitForFinished()

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

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

typename Select<0>::Type QDBusPendingReply::operator typename Select<0>::Type() const

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

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

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

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

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

Spec-Zone.ru

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