Spec-Zone.ru › Qt 6.1

Класс 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.1/qdbuspendingreply.html

Spec-Zone.ru

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