QDBusPendingCallWatcher Class

Die Klasse QDBusPendingCallWatcher bietet eine bequeme Möglichkeit, auf asynchrone Antworten zu warten. Mehr...

Kopfzeile: #include <QDBusPendingCallWatcher>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus
Erbt: QObject und QDBusPendingCall

Öffentliche Funktionen

QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr)
virtual ~QDBusPendingCallWatcher()
bool isFinished() const
void waitForFinished()

Signale

void finished(QDBusPendingCallWatcher *self = nullptr)

Detaillierte Beschreibung

Der QDBusPendingCallWatcher stellt das Signal finished() bereit, das ausgegeben wird, wenn eine Antwort eintrifft.

Es wird normalerweise wie im folgenden Beispiel verwendet:

    QDBusPendingCall async = iface->asyncCall("RemoteMethod", value1, value2);
    QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this);

    QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this,
                     &DBus_PendingCall_Interface::callFinishedSlot);

Beachten Sie, dass es nicht notwendig ist, das ursprüngliche QDBusPendingCall Objekt zu behalten, da QDBusPendingCallWatcher ebenfalls von dieser Klasse erbt.

Der Slot, mit dem der obige Code verbunden ist, könnte etwa so aussehen wie der folgende:

void DBus_PendingCall_Interface::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();
}

Beachten Sie die Verwendung von QDBusPendingReply, um die Argumenttypen in der Antwort zu validieren. Wenn die Antwort nicht genau zwei Argumente enthält (eine Zeichenkette und eine QByteArray), gibt QDBusPendingReply::isError() true zurück.

Siehe auch QDBusPendingReply.

Dokumentation der Mitgliedsfunktionen

[explicit] QDBusPendingCallWatcher::QDBusPendingCallWatcher(const QDBusPendingCall &call, QObject *parent = nullptr)

Erstellt ein QDBusPendingCallWatcher-Objekt, um auf Antworten auf den asynchronen anstehenden Anruf call zu achten und setzt den Parent dieses Objekts auf parent.

[virtual noexcept] QDBusPendingCallWatcher::~QDBusPendingCallWatcher()

Zerstört dieses Objekt. Wenn dieses QDBusPendingCallWatcher Objekt der letzte Verweis auf den noch nicht beendeten anstehenden Aufruf war, wird der Aufruf abgebrochen.

[signal] void QDBusPendingCallWatcher::finished(QDBusPendingCallWatcher *self = nullptr)

Dieses Signal wird ausgegeben, wenn der anstehende Aufruf beendet ist und seine Antwort verfügbar ist. Der Parameter self ist ein Zeiger auf das Objekt selbst, der der Einfachheit halber übergeben wird, damit der Slot auf die Eigenschaften zugreifen und den Inhalt der Antwort bestimmen kann.

bool QDBusPendingCallWatcher::isFinished() const

Gibt true zurück, wenn die Verarbeitung des anstehenden Aufrufs abgeschlossen und die Antwort empfangen wurde.

Beachten Sie, dass diese Funktion ihren Zustand nur ändert, wenn Sie waitForFinished() aufrufen oder wenn ein externes D-Bus-Ereignis eintritt, was im Allgemeinen nur geschieht, wenn Sie zur Ausführung der Ereignisschleife zurückkehren.

Siehe auch QDBusPendingReply::isFinished().

void QDBusPendingCallWatcher::waitForFinished()

Setzt die Ausführung des aufrufenden Threads aus, bis die Antwort empfangen und verarbeitet wurde. Nach der Rückkehr dieser Funktion sollte isFinished() true zurückgeben, was bedeutet, dass der Inhalt der Antwort zur Verarbeitung bereit ist.

Siehe auch QDBusPendingReply::waitForFinished().

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.