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