Класс 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 и QDBusAbstractInterface::asyncCall.
Документация по типам членов
Перечисление 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.13/qdbuspendingreply.html