QDBusPendingReply Class
template <typename... Types> class QDBusPendingReplyDie Klasse QDBusPendingReply enthält die Antwort auf einen asynchronen Methodenaufruf. Mehr...
Kopfzeile: | #include <QDBusPendingReply> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake: | QT += dbus |
Erbt: | QDBusPendingReplyBase |
Öffentliche Typen
enum | anonymous { Count } |
Öffentliche Funktionen
QDBusPendingReply() | |
QDBusPendingReply(const QDBusMessage &message) | |
QDBusPendingReply(const QDBusPendingCall &call) | |
QDBusPendingReply(const QDBusPendingReply<Types...> &other) | |
QVariant | argumentAt(int index) const |
int | count() const |
QDBusError | error() const |
bool | isError() const |
bool | isFinished() const |
bool | isValid() const |
QDBusMessage | reply() const |
typename Select<0>::Type | value() const |
void | waitForFinished() |
typename Select<0>::Type | operator typename Select<0>::Type() const |
QDBusPendingReply<Types...> & | operator=(const QDBusMessage &message) |
QDBusPendingReply<Types...> & | operator=(const QDBusPendingCall &call) |
QDBusPendingReply<Types...> & | operator=(const QDBusPendingReply<Types...> &other) |
Detaillierte Beschreibung
Die QDBusPendingReply ist eine variable Vorlagenklasse. Die Template-Parameter sind die Typen, die verwendet werden, um den Inhalt der Daten der Antwort zu extrahieren.
Diese Klasse ist in ihrer Funktionalität ähnlich wie QDBusReply, jedoch mit zwei wichtigen Unterschieden:
- QDBusReply sie akzeptiert genau einen Rückgabetyp, während QDBusPendingReply eine beliebige Anzahl von Typen haben kann
- QDBusReply funktioniert nur bei bereits abgeschlossenen Antworten, wohingegen QDBusPendingReply es erlaubt, auf Antworten von anstehenden Aufrufen zu warten
Wobei man mit QDBusReply schreiben würde:
QDBusReply<QString> reply = interface->call("RemoteMethod"); if (reply.isValid()) // use the returned value useValue(reply.value()); else // call failed. Show an error condition. showError(reply.error());
mit QDBusPendingReply wäre der entsprechende Code (einschließlich des blockierenden Wartens auf die Antwort):
QDBusPendingReply<QString> reply = iface->asyncCall("RemoteMethod"); reply.waitForFinished(); if (reply.isError()) // call failed. Show an error condition. showErrorD(reply.error()); else // use the returned value useValue(reply.value());
Für Methodenaufrufe, die mehr als ein Ausgangsargument haben, würden Sie mit QDBusReply schreiben:
reply = interface->call("RemoteMethod");
während bei QDBusPendingReply alle Ausgangsargumente Template-Parameter sein sollten:
QDBusPendingReply<bool, QString> reply = iface->asyncCall("RemoteMethod"); reply.waitForFinished(); if (!reply.isError()) { if (reply.argumentAt<0>()) showSuccess(reply.argumentAt<1>()); else showFailure(reply.argumentAt<1>()); }
QDBusPendingReply-Objekte können mit QDBusPendingCallWatcher -Objekten verknüpft werden, die Signale ausgeben, wenn die Antwort eintrifft.
Siehe auch QDBusPendingCallWatcher und QDBusReply.
Dokumentation der Mitgliedstypen
enum QDBusPendingReply::anonymous
Konstante | Wert | Beschreibung |
---|---|---|
QDBusPendingReply::Count | std::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types) | Die Anzahl der Argumente, die für die Antwort erwartet werden |
Dokumentation der Mitgliedsfunktionen
QDBusPendingReply::QDBusPendingReply()
Erzeugt ein leeres QDBusPendingReply-Objekt. Ohne dieser Antwort ein QDBusPendingCall Objekt zuzuweisen, kann QDBusPendingReply nichts tun. Alle Funktionen geben ihre Fehlerwerte zurück.
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
Erzeugt ein QDBusPendingReply-Objekt, das seinen Inhalt aus der Nachricht message bezieht. In diesem Fall befindet sich dieses Objekt bereits in seinem fertigen Zustand und der Inhalt der Antwort ist zugänglich.
Siehe auch isFinished().
QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)
Erzeugt ein QDBusPendingReply-Objekt, das seinen Inhalt aus dem call pending asynchronous call bezieht. Dieses QDBusPendingReply-Objekt hat denselben Verweis auf den anstehenden Aufruf wie call.
QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)
Erzeugt eine Kopie des other QDBusPendingReply-Objekts. Genau wie QDBusPendingCall und QDBusPendingCallWatcher hat auch dieses QDBusPendingReply-Objekt denselben Verweis auf ausstehende Anrufe. Alle Kopien teilen sich die gleichen Rückgabewerte.
QVariant QDBusPendingReply::argumentAt(int index) const
Gibt das Argument an der Position index im Inhalt der Antwort zurück. Wenn die Antwort nicht so viele Elemente enthält, ist der Rückgabewert dieser Funktion undefiniert (führt wahrscheinlich zu einem Assertion-Fehler), so dass es wichtig ist, zu überprüfen, ob die Verarbeitung abgeschlossen und die Antwort gültig ist.
Wenn die Antwort kein Argument an der Position index enthält oder wenn die Antwort ein Fehler war, gibt diese Funktion einen ungültigen QVariant zurück. Da D-Bus-Nachrichten niemals ungültige QVarianten enthalten können, kann diese Rückgabe zur Erkennung einer Fehlerbedingung verwendet werden.
[constexpr]
int QDBusPendingReply::count() const
Gibt die Anzahl der Argumente zurück, die die Antwort haben soll. Diese Anzahl entspricht der Anzahl der nicht leeren Vorlagenparameter in dieser Klasse.
Wenn die Antwort mit einer anderen Anzahl von Argumenten (oder mit anderen Typen) eintrifft, wird sie in eine Fehlerantwort umgewandelt, die auf eine fehlerhafte Signatur hinweist.
QDBusError QDBusPendingReply::error() const
Ruft den Fehlerinhalt der Antwortnachricht ab, wenn deren Verarbeitung abgeschlossen ist. Ist die Verarbeitung der Antwortnachricht noch nicht abgeschlossen oder enthält sie eine normale Antwortnachricht (nicht fehlerhaft), gibt diese Funktion einen ungültigen QDBusError zurück.
bool QDBusPendingReply::isError() const
Gibt true
zurück, wenn die Antwort eine Fehlermeldung enthält, false, wenn sie eine normale Methodenantwort enthält.
Wenn der anstehende Aufruf noch nicht abgeschlossen ist, gibt diese Funktion auch true
zurück.
bool QDBusPendingReply::isFinished() const
Gibt true
zurück, wenn die Bearbeitung des anstehenden Aufrufs abgeschlossen ist und die Antwort empfangen wurde. Wenn diese Funktion true
zurückgibt, sollten die Methoden isError(), error() und reply() gültige Informationen zurückgeben.
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 QDBusPendingCallWatcher::isFinished().
bool QDBusPendingReply::isValid() const
Gibt true
zurück, wenn die Antwort eine normale Antwortnachricht enthält, false, wenn sie etwas anderes enthält.
Wenn der anstehende Aufruf noch nicht abgeschlossen ist, gibt diese Funktion false zurück.
QDBusMessage QDBusPendingReply::reply() const
Ruft die Antwortnachricht ab, die für den gesendeten asynchronen Aufruf empfangen wurde, sofern dessen Bearbeitung abgeschlossen ist. Ist der anstehende Aufruf noch nicht beendet, gibt diese Funktion eine QDBusMessage vom Typ QDBusMessage::InvalidMessage zurück.
Nach Abschluss der Verarbeitung ist der Nachrichtentyp entweder eine Fehlermeldung oder eine normale Antwortnachricht der Methode.
typename Select<0>::Type QDBusPendingReply::value() const
Gibt das erste Argument in dieser Antwort zurück, gecastet auf den Typ Types[0]
(der erste Template-Parameter dieser Klasse). Dies ist gleichbedeutend mit dem Aufruf von argumentAt<0>().
Diese Funktion dient der Bequemlichkeit und entspricht der Funktion QDBusReply::value().
Falls die Antwort noch nicht eingetroffen ist, bewirkt diese Funktion, dass der aufrufende Thread blockiert wird, bis die Antwort verarbeitet ist.
Wenn es sich bei der Antwort um eine Fehlerantwort handelt, gibt diese Funktion ein standardmäßig konstruiertes Types[0]
-Objekt zurück, das von einem gültigen Wert nicht zu unterscheiden sein kann. Um zuverlässig festzustellen, ob die Nachricht ein Fehler war, verwenden Sie isError().
void QDBusPendingReply::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 QDBusPendingCallWatcher::waitForFinished().
typename Select<0>::Type QDBusPendingReply::operator typename Select<0>::Type() const
Gibt das erste Argument in dieser Antwort zurück, gecastet auf den Typ Types[0]
(der erste Template-Parameter dieser Klasse). Dies ist gleichbedeutend mit dem Aufruf von argumentAt<0>().
Diese Funktion dient der Bequemlichkeit und entspricht der Funktion QDBusReply::value().
Falls die Antwort noch nicht eingetroffen ist, bewirkt diese Funktion, dass der aufrufende Thread blockiert wird, bis die Antwort verarbeitet ist.
Wenn es sich bei der Antwort um eine Fehlerantwort handelt, gibt diese Funktion ein standardmäßig konstruiertes Types[0]
-Objekt zurück, das von einem gültigen Wert nicht zu unterscheiden sein kann. Um zuverlässig festzustellen, ob die Nachricht ein Fehler war, verwenden Sie isError().
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)
Veranlasst dieses Objekt, seinen Inhalt aus der Nachricht message zu übernehmen, und lässt den Verweis auf den aktuellen anhängigen Aufruf fallen. Wenn der aktuelle Verweis auf einen noch nicht beendeten anhängigen Aufruf lautet und dies der letzte Verweis ist, wird der anhängige Aufruf abgebrochen und es gibt keine Möglichkeit, den Inhalt der Antwort abzurufen, wenn er ankommt.
Nach Beendigung dieser Funktion befindet sich das Objekt QDBusPendingReply in seinem "fertigen" Zustand und der Inhalt von message ist zugänglich.
Siehe auch isFinished().
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)
Veranlasst dieses Objekt, seinen Inhalt aus dem anhängigen Aufruf call zu übernehmen, und lässt den Verweis auf den aktuellen anhängigen Aufruf fallen. Wenn der aktuelle Verweis auf einen noch nicht beendeten anhängigen Aufruf lautet und dies der letzte Verweis ist, wird der anhängige Aufruf abgebrochen und es gibt keine Möglichkeit, den Inhalt der Antwort abzurufen, wenn er ankommt.
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)
Erstellt eine Kopie von other und verwirft den Verweis auf den aktuellen anhängigen Aufruf. Wenn der aktuelle Verweis auf einen noch nicht beendeten anhängigen Aufruf lautet und dies der letzte Verweis ist, wird der anhängige Aufruf abgebrochen und es gibt keine Möglichkeit, den Inhalt der Antwort abzurufen, wenn er ankommt.
© 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.