Класс 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