Spec-Zone.ru › Qt 6.0

Класс 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
  • Список всех членов, включая унаследованные

Типы публичного доступа

Перечисление anonymous { 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::anonymous

Постоянная Значение Описание
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.0/qdbuspendingreply.html

Spec-Zone.ru

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