Класс QDBusPendingCallWatcher
Класс QDBusPendingCallWatcher предоставляет удобный способ ожидания асинхронных ответов. Подробнее...
| Заголовок: | #include <QDBusPendingCallWatcher> |
| qmake: | QT += dbus |
| С версии: | Qt 4.5 |
| Наследует: | QObject и QDBusPendingCall |
Этот класс был введен в Qt 4.5.
Открытые функции
| QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr) | |
| virtual | ~QDBusPendingCallWatcher() |
| bool | isFinished() const |
| void | waitForFinished() |
Сигналы
| void | finished(QDBusPendingCallWatcher *self = nullptr) |
Подробное описание
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.
Документация по функциям-членам
QDBusPendingCallWatcher::QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr)
Создаёт объект QDBusPendingCallWatcher для отслеживания ответов на асинхронный ожидающий вызов call и устанавливает родительский объект для этого объекта как parent.
[signal] void QDBusPendingCallWatcher::finished(QDBusPendingCallWatcher *self = nullptr)
Этот сигнал испускается, когда ожидающий вызов завершён, и его ответ доступен. Параметр self — это указатель на сам объект, передаваемый для удобства, чтобы слот мог получить доступ к свойствам и определить содержимое ответа.
[virtual] QDBusPendingCallWatcher::~QDBusPendingCallWatcher()
Уничтожает этот объект. Если этот объект QDBusPendingCallWatcher был последней ссылкой на незавершенный ожидающий вызов, вызов будет отменен.
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/qt-5.15/qdbuspendingcallwatcher.html