Класс QDBusPendingReply
Класс QDBusPendingReply содержит ответ на асинхронный вызов метода. Подробнее...
| Заголовок: | #include <QDBusPendingReply> |
| qmake: | QT += dbus |
| С момента: | Qt 4.5 |
| Наследует: | QDBusPendingCall |
Открытые типы
| Перечисление | анонимное { Count } |
Открытые функции
| QDBusPendingReply() | |
| QDBusPendingReply(const QDBusPendingReply &other) | |
| QDBusPendingReply(const QDBusPendingCall &call) | |
| QDBusPendingReply(const QDBusMessage &message) | |
| QVariant | argumentAt(int index) const |
| int | count() const |
| QDBusError | error() const |
| bool | isError() const |
| bool | isFinished() const |
| bool | isValid() const |
| QDBusMessage | reply() const |
| QDBusPendingReply::T1 | value() const |
| void | waitForFinished() |
| QDBusPendingReply::T1 | operator QDBusPendingReply::T1() const |
| QDBusPendingReply & | operator=(const QDBusPendingReply &other) |
| QDBusPendingReply & | operator=(const QDBusPendingCall &call) |
| QDBusPendingReply & | operator=(const QDBusMessage &message) |
- 3 открытые функции унаследованы от QDBusPendingCall
Дополнительные унаследованные члены
- 2 статических открытых члена унаследованы от QDBusPendingCall
Подробное описание
Класс QDBusPendingReply содержит ответ на асинхронный вызов метода.
Класс 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::анонимное
| Константа | Значение | Описание |
|---|---|---|
QDBusPendingReply::Count |
0 |
Количество аргументов, которое ожидается в ответе |
Документация по функциям-членам
QDBusPendingReply::QDBusPendingReply()
Создаёт пустой объект QDBusPendingReply. Без присвоения объекта QDBusPendingCall этому ответу, QDBusPendingReply ничего не сможет сделать. Все функции возвращают свои значения ошибок.
QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply &other)
Создаёт копию объекта QDBusPendingReply other. Подобно QDBusPendingCall и QDBusPendingCallWatcher, этот объект QDBusPendingReply будет разделять ссылку на тот же ожидающий вызов. Все копии разделяют те же значения возвращаемых ошибок.
QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)
Создаёт объект QDBusPendingReply, который будет получать своё содержимое из ожидающего асинхронного вызова call. Этот объект QDBusPendingReply будет разделять ссылку на ожидающий вызов с call.
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
Создаёт объект QDBusPendingReply, который будет получать своё содержимое из сообщения message. В этом случае объект будет уже в завершённом состоянии, и содержимое ответа будет доступно.
См. также isFinished().
QVariant QDBusPendingReply::argumentAt(int index) const
Возвращает аргумент по позиции index в содержимом ответа. Если в ответе нет такого количества элементов, значение этой функции неопределённо (вероятно, вызовет ошибку проверки), поэтому важно убедиться, что обработка завершена и ответ корректен.
Если ответ не содержит аргумент по позиции index или если ответ был ошибкой, эта функция возвращает невалидный QVariant. Поскольку сообщения D-Bus никогда не могут содержать невалидный QVariant, это возвращение может использоваться для обнаружения состояния ошибки.
int QDBusPendingReply::count() const
Возвращает количество аргументов, которое ожидается в ответе. Это число соответствует числу параметров шаблона, не являющихся void, в этом классе.
Если ответ приходит с другим количеством аргументов (или с другими типами), он будет преобразован в ответ об ошибке, указывающей на плохой тип подписи.
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.
После завершения обработки тип сообщения будет либо сообщением об ошибке, либо обычным сообщением ответа метода.
QDBusPendingReply::T1 QDBusPendingReply::value() const
Возвращает первый аргумент в этом ответе, преобразованный к типу T1 (первый шаблонный параметр этого класса). Это эквивалентно вызову argumentAt<0>().
Эта функция предоставляется для удобства, соответствуя функции QDBusReply::value().
Обратите внимание, что если ответ еще не получен, эта функция заставляет вызывающую нить блокироваться до обработки ответа.
Если ответ является ответом об ошибке, эта функция возвращает объект T1, созданный по умолчанию, который может быть неотличим от действительного значения. Для надежного определения того, было ли сообщение ошибкой, используйте isError().
void QDBusPendingReply::waitForFinished()
Приостанавливает выполнение вызывающей нити до получения и обработки ответа. После возврата из этой функции isFinished() должна возвращать true, указывая, что содержимое ответа готово к обработке.
См. также QDBusPendingCallWatcher::waitForFinished().
QDBusPendingReply::T1 QDBusPendingReply::operator QDBusPendingReply::T1() const
Возвращает первый аргумент в этом ответе, преобразованный к типу T1 (первый шаблонный параметр этого класса). Это эквивалентно вызову argumentAt<0>().
Эта функция предоставляется для удобства, соответствуя функции QDBusReply::value().
Обратите внимание, что если ответ еще не получен, эта функция заставляет вызывающую нить блокироваться до обработки ответа.
Если ответ является ответом об ошибке, эта функция возвращает объект T1, созданный по умолчанию, который может быть неотличим от действительного значения. Для надежного определения того, было ли сообщение ошибкой, используйте isError().
QDBusPendingReply &QDBusPendingReply::operator=(const QDBusPendingReply &other)
Создаёт копию other и удаляет ссылку на текущий ожидаемый вызов. Если текущая ссылка относится к незавершенному ожидаемому вызову, и это последняя ссылка, ожидаемый вызов будет отменён, и не будет возможности получить содержимое ответа, когда оно придёт.
QDBusPendingReply &QDBusPendingReply::operator=(const QDBusPendingCall &call)
Заставляет этот объект принять содержимое из ожидаемого вызова call и удаляет ссылку на текущий ожидаемый вызов. Если текущая ссылка относится к незавершенному ожидаемому вызову, и это последняя ссылка, ожидаемый вызов будет отменён, и не будет возможности получить содержимое ответа, когда оно придёт.
QDBusPendingReply &QDBusPendingReply::operator=(const QDBusMessage &message)
Заставляет этот объект принять содержимое из сообщения message и удаляет ссылку на текущий ожидаемый вызов. Если текущая ссылка относится к незавершенному ожидаемому вызову, и это последняя ссылка, ожидаемый вызов будет отменён, и не будет возможности получить содержимое ответа, когда оно придёт.
После завершения этой функции объект QDBusPendingReply переходит в состояние "завершено", и содержимое message становится доступным.
См. также isFinished().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.11/qdbuspendingreply.html