Класс QDBusPendingReply
Класс QDBusPendingReply содержит ответ на асинхронный вызов метода Подробнее...
| Заголовок: | #include <QDBusPendingReply> |
| qmake: | QT += dbus |
| С тех пор: | Qt 4.5 |
| Наследует: | QDBusPendingCall |
Публичные функции
| QDBusPendingReply() | |
| QDBusPendingReply(const QDBusPendingReply &other) | |
| QDBusPendingReply(const QDBusPendingCall &call) | |
| QDBusPendingReply(const QDBusMessage &message) | |
| QVariant | argumentAt(int index) const |
| Type | argumentAt() const |
| int | count() const |
| QDBusError | error() const |
| bool | isError() const |
| bool | isFinished() const |
| bool | isValid() const |
| QDBusMessage | reply() const |
| T1 | value() const |
| void | waitForFinished() |
| operator 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()
Создаёт пустой объект 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 никогда не могут содержать недействительные QVariants, это возвращаемое значение может использоваться для обнаружения условия ошибки.
Type QDBusPendingReply::argumentAt() const
Возвращает аргумент в позиции Index (который является параметром шаблона) преобразованный к типу Type. Эта функция использует шаблонный код для определения соответствующего Type типа в соответствии со списком типов, использованным при построении этого объекта.
Обратите внимание, что если ответ ещё не пришёл, эта функция заблокирует поток вызова до обработки ответа.
Если в ответе нет аргумента в позиции Index или если ответ был ошибкой, эта функция возвращает объект Type, который создан по умолчанию, что может быть неотличимо от действительного значения. Чтобы надёжно определить, было ли сообщение ошибкой, используйте isError().
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.
После завершения обработки тип сообщения будет либо сообщением об ошибке, либо обычным сообщением ответа метода.
T1 QDBusPendingReply::value() const
Возвращает первый аргумент в этом ответе, преобразованный к типу T1 (первый шаблонный параметр этого класса). Это эквивалентно вызову argumentAt<0>().
Эта функция предоставляется для удобства, соответствуя функции QDBusReply::value().
Обратите внимание, что если ответ еще не пришел, эта функция блокирует вызывающую нить до обработки ответа.
Если ответ — ответ об ошибке, эта функция возвращает объект T1, созданный по умолчанию, который может быть неотличим от действительного значения. Для надежного определения того, было ли сообщение ошибкой, используйте isError().
void QDBusPendingReply::waitForFinished()
Приостанавливает выполнение вызывающей нити до получения и обработки ответа. После возврата этой функции isFinished() должна вернуть true, указывая, что содержимое ответа готово к обработке.
См. также QDBusPendingCallWatcher::waitForFinished().
QDBusPendingReply::operator 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.6/qdbuspendingreply.html