Класс QDBusPendingReply
шаблон <typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8> class 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.
Документация по типам членов
Перечисление 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 никогда не могут содержать недействительные QVariants, это возвращаемое значение может использоваться для определения ошибки.
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.15/qdbuspendingreply.html