Spec-Zone.ru › Qt 5.9

Класс 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. Без присвоения объекту 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, этот возврат может быть использован для обнаружения условия ошибки.

Type QDBusPendingReply::argumentAt() const

Возвращает аргумент по позиции Index (это шаблонный параметр) приведённый к типу Type. Эта функция использует шаблонный код для определения правильного типа Type, в соответствии со списком типов, используемым при построении этого объекта.

Обратите внимание, что если ответ ещё не пришёл, эта функция заблокирует вызывающую нить до обработки ответа.

Если в ответе нет аргумента по позиции Index или если ответ был ошибкой, функция возвращает объект Type, который сконструирован по умолчанию, что может быть неотличимо от допустимого значения. Для надёжного определения того, было ли сообщение ошибкой, используйте isError().

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().

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/qt-5.9/qdbuspendingreply.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API