Класс QDBusPendingCallWatcher
Класс QDBusPendingCallWatcher предоставляет удобный способ ожидания асинхронных ответов Подробнее...
| Заголовок: | #include <QDBusPendingCallWatcher> |
| qmake: | QT += dbus |
| С момента: | Qt 4.5 |
| Наследуется от: | QObject и QDBusPendingCall |
Публичные функции
| QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = Q_NULLPTR) | |
| ~QDBusPendingCallWatcher() | |
| bool | isFinished() const |
| void | waitForFinished() |
- 31 публичная функция унаследована от QObject
- 3 публичных функции унаследованы от QDBusPendingCall
Сигналы
| void | finished(QDBusPendingCallWatcher *self = Q_NULLPTR) |
- 2 сигнала унаследованы от QObject
Дополнительные унаследованные члены
- 1 свойство унаследовано от QObject
- 1 публичный слот унаследован от QObject
- 11 статические публичные члены унаследованы от QObject
- 2 статических публичных члена унаследованы от QDBusPendingCall
- 9 защищенных функций унаследованы от QObject
Подробное описание
Класс QDBusPendingCallWatcher предоставляет удобный способ ожидания асинхронных ответов
Класс QDBusPendingCallWatcher предоставляет сигнал finished(), который будет выпущен, когда придёт ответ.
Обычно используется следующим образом:
QDBusPendingCall async = iface->asyncCall("RemoteMethod", value1, value2);
QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this);
QObject::connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)),
this, SLOT(callFinishedSlot(QDBusPendingCallWatcher*))); Обратите внимание, что нет необходимости сохранять исходный объект QDBusPendingCall, так как QDBusPendingCallWatcher также наследуется от него.
Подключённый к этому коду слот может быть похожим на следующий:
void MyClass::callFinishedSlot(QDBusPendingCallWatcher *call)
{
QDBusPendingReply<QString, QByteArray> reply = *call;
if (reply.isError()) {
showError();
} else {
QString text = reply.argumentAt<0>();
QByteArray data = reply.argumentAt<1>();
showReply(text, data);
}
call->deleteLater();
} Обратите внимание на использование QDBusPendingReply для проверки типов аргументов в ответе. Если ответ не содержал ровно двух аргументов (одной строки и одного QByteArray), QDBusPendingReply::isError() вернёт true.
См. также QDBusPendingReply и QDBusAbstractInterface::asyncCall().
Документация по членам функций
QDBusPendingCallWatcher::QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = Q_NULLPTR)
Создаёт объект QDBusPendingCallWatcher для наблюдения за ответами на асинхронный вызов call и устанавливает родительский объект для этого объекта в parent.
QDBusPendingCallWatcher::~QDBusPendingCallWatcher()
Удаляет этот объект. Если этот объект QDBusPendingCallWatcher был последней ссылкой на незавершенный асинхронный вызов, вызов будет отменён.
[signal] void QDBusPendingCallWatcher::finished(QDBusPendingCallWatcher *self = Q_NULLPTR)
Этот сигнал излучается, когда асинхронный вызов завершен, и его ответ доступен. Параметр self — указатель на сам объект, передаваемый для удобства, чтобы слот мог получить доступ к свойствам и определить содержимое ответа.
bool QDBusPendingCallWatcher::isFinished() const
Возвращает true если асинхронный вызов завершил обработку, и ответ получен.
Обратите внимание, что эта функция изменяет состояние только если вы вызываете waitForFinished() или если внешнее событие D-Bus происходит, что в общем случае происходит только если вы возвращаетесь к выполнению цикла событий.
См. также QDBusPendingReply::isFinished().
void QDBusPendingCallWatcher::waitForFinished()
Приостанавливает выполнение потока вызывающей функции до тех пор, пока ответ не будет получен и обработан. После возвращения из этой функции isFinished() должна возвращать true, показывая, что содержимое ответа готово к обработке.
См. также QDBusPendingReply::waitForFinished().
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qdbuspendingcallwatcher.html