Auf dieser Seite

QDBusPendingCallWatcher Class

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

Header: #include <QDBusPendingCallWatcher>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus
Erbt von: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)

Ausführliche Beschreibung

Der QDBusPendingCallWatcher stellt das Signal „ finished()“ bereit, das ausgelöst wird, sobald eine Antwort eintrifft.

Er wird in der Regel 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 beizubehalten, da der `QDBusPendingCallWatcher` ebenfalls von dieser Klasse erbt.

Der Slot, an den der obige Code angeschlossen ist, könnte etwa wie folgt aussehen:

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 ` zur Validierung der Argumenttypen in der Antwort. Wenn die Antwort nicht genau zwei Argumente enthält (eine Zeichenkette und ein ` QByteArray`), gibt ` QDBusPendingReply::isError()` den Wert „true“ zurück.

Siehe auch „ QDBusPendingReply “.

Dokumentation der Member-Funktionen

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

Erstellt ein `QDBusPendingCallWatcher`-Objekt, um auf Antworten des asynchronen ausstehenden Aufrufs ` call ` zu warten, und legt die übergeordnete Instanz dieses Objekts auf ` parent` fest.

[virtual noexcept] QDBusPendingCallWatcher::~QDBusPendingCallWatcher()

Löscht dieses Objekt. Wenn dieses „ QDBusPendingCallWatcher “-Objekt die letzte Referenz auf den noch nicht abgeschlossenen, ausstehenden Aufruf war, wird der Aufruf abgebrochen.

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

Dieses Signal wird ausgelöst, wenn der ausstehende Aufruf abgeschlossen ist und die Antwort vorliegt. 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 ermitteln kann.

bool QDBusPendingCallWatcher::isFinished() const

Gibt „ true “ zurück, wenn die Verarbeitung des ausstehenden Aufrufs abgeschlossen ist und die Antwort empfangen wurde.

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

Siehe auch ` QDBusPendingReply::isFinished()`.

void QDBusPendingCallWatcher::waitForFinished()

Hält die Ausführung des aufrufenden Threads an, bis die Antwort empfangen und verarbeitet wurde. Nach der Rückkehr aus dieser Funktion sollte ` isFinished()` den Wert „true“ zurückgeben, was anzeigt, dass der Inhalt der Antwort zur Verarbeitung bereitsteht.

Siehe auch ` QDBusPendingReply::waitForFinished()`.

© 2026 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.