QDBusPendingReply Class
Die Klasse „QDBusPendingReply“ enthält die Antwort auf einen asynchronen Methodenaufruf. Mehr...
| Header: | #include <QDBusPendingReply> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
| qmake: | QT += dbus |
| Erbt von: | QDBusPendingReplyBase |
Öffentliche Typen
| enum { Count } |
Öffentliche Funktionen
| QDBusPendingReply() | |
| QDBusPendingReply(const QDBusMessage &message) | |
| QDBusPendingReply(const QDBusPendingCall &call) | |
| QDBusPendingReply(const QDBusPendingReply<Types...> &other) | |
(since 6.10) | QDBusPendingReply(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() |
| operator typename Select<0>::Type() const | |
(since 6.10) int & | operator=(QDBusPendingReply<Types...> &&other) |
| QDBusPendingReply<Types...> & | operator=(const QDBusMessage &message) |
| QDBusPendingReply<Types...> & | operator=(const QDBusPendingCall &call) |
| int & | operator=(const QDBusPendingReply<Types...> &other) |
Ausführliche Beschreibung
QDBusPendingReply ist eine variadische Template-Klasse. Die Template-Parameter sind die Typen, die zum Extrahieren des Inhalts der Antwortdaten verwendet werden.
Diese Klasse ähnelt in ihrer Funktionalität der Klasse „ QDBusReply “, weist jedoch zwei wichtige Unterschiede auf:
- QDBusReply akzeptiert genau einen Rückgabetyp, während „QDBusPendingReply“ eine beliebige Anzahl von Typen haben kann
- QDBusReply funktioniert nur bei bereits abgeschlossenen Antworten, während „QDBusPendingReply“ es ermöglicht, auf Antworten von noch ausstehenden Aufrufen zu warten
Während man mit ` QDBusReply ` Folgendes 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ürde der entsprechende Code (einschließlich des blockierenden Wartens auf die Antwort) wie folgt lauten:
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());Bei Methodenaufrufen mit mehr als einem Ausgabeargument würden Sie mit ` QDBusReply` Folgendes schreiben:
reply = interface->call("RemoteMethod");während bei „QDBusPendingReply“ alle Ausgabeargumente 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, sobald die Antwort eintrifft.
Siehe auch „ QDBusPendingCallWatcher “ und „ QDBusReply “.
Dokumentation zu Mitgliedstypen
[anonymous] enum
| Konstante | Wert | Beschreibung |
|---|---|---|
QDBusPendingReply::Count | std::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types) | Die Anzahl der Argumente, die die Antwort voraussichtlich haben wird |
Dokumentation der Member-Funktionen
[default] QDBusPendingReply::QDBusPendingReply()
Erstellt ein leeres `QDBusPendingReply`-Objekt. Ohne die Zuweisung eines ` QDBusPendingCall `-Objekts zu dieser Antwort kann `QDBusPendingReply` keine Aktion ausführen. Alle Funktionen geben ihre Fehlerwerte zurück.
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
Erstellt ein `QDBusPendingReply`-Objekt, dessen Inhalt aus der Nachricht ` message` stammt. In diesem Fall befindet sich dieses Objekt bereits im Status „finished“ und der Inhalt der Antwort ist zugänglich.
Siehe auch ` isFinished()`.
QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)
Erstellt ein `QDBusPendingReply`-Objekt, dessen Inhalt aus dem ausstehenden asynchronen Aufruf ` call ` stammt. Dieses `QDBusPendingReply`-Objekt nutzt dieselbe Referenz auf den ausstehenden Aufruf wie ` call`.
[implicit] QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)
Erstellt eine Kopie des QDBusPendingReply-Objekts „ other “. Genau wie bei „ QDBusPendingCall “ und „ QDBusPendingCallWatcher “ nutzt dieses QDBusPendingReply-Objekt dieselbe Referenz auf den ausstehenden Aufruf. Alle Kopien nutzen dieselben Rückgabewerte.
[implicit, since 6.10] QDBusPendingReply::QDBusPendingReply(QDBusPendingReply<Types...> &&other)
Moves – Erstellt ein neues `QDBusPendingReply`-Objekt aus ` other`.
Diese Funktion wurde in Qt 6.10 eingeführt.
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 (was wahrscheinlich zu einem Assertion-Fehler führt); daher ist es wichtig, zu überprüfen, ob die Verarbeitung abgeschlossen ist 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 ein ungültiges ` QVariant` zurück. Da D-Bus-Nachrichten niemals ungültige `QVariants` enthalten können, kann dieser Rückgabewert verwendet werden, um einen Fehlerzustand zu erkennen.
[constexpr] int QDBusPendingReply::count() const
Gibt die Anzahl der Argumente zurück, die die Antwort haben soll. Diese Zahl entspricht der Anzahl der nicht-void-Template-Parameter 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, sofern deren Verarbeitung abgeschlossen ist. Ist die Verarbeitung der Antwortnachricht noch nicht abgeschlossen oder enthält sie eine normale Antwortnachricht (keinen Fehler), gibt diese Funktion einen ungültigen ` QDBusError` zurück.
bool QDBusPendingReply::isError() const
Gibt „ true “ zurück, wenn die Antwort eine Fehlermeldung enthält, andernfalls „false“, wenn es sich um eine normale Methodenantwort handelt.
Wenn die Verarbeitung des ausstehenden Aufrufs noch nicht abgeschlossen ist, gibt diese Funktion ebenfalls „ true “ zurück.
bool QDBusPendingReply::isFinished() const
Gibt „ true “ zurück, wenn die Verarbeitung des ausstehenden 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 den Status 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, andernfalls „false“.
Wenn die Bearbeitung des ausstehenden Anrufs noch nicht abgeschlossen ist, gibt diese Funktion „false“ zurück.
QDBusMessage QDBusPendingReply::reply() const
Ruft die für den gesendeten asynchronen Aufruf empfangene Antwortnachricht ab, sofern deren Verarbeitung abgeschlossen ist. Ist der ausstehende Aufruf noch nicht abgeschlossen, gibt diese Funktion eine „ QDBusMessage “ vom Typ „ QDBusMessage::InvalidMessage “ zurück.
Nach Abschluss der Verarbeitung handelt es sich bei dem Nachrichtentyp entweder um eine Fehlermeldung oder um eine normale Methodenantwort.
typename Select<0>::Type QDBusPendingReply::value() const
Gibt das erste Argument dieser Antwort zurück, das in den Typ ` Types[0] ` (den ersten Template-Parameter dieser Klasse) umgewandelt wurde. Dies entspricht dem Aufruf von ` argumentAt<0>()`.
Diese Funktion wird als Komfortfunktion bereitgestellt und entspricht der Funktion ` QDBusReply::value()`.
Beachten Sie, dass diese Funktion, falls die Antwort noch nicht eingegangen ist, dazu führt, dass der aufrufende Thread blockiert, bis die Antwort verarbeitet wurde.
Handelt es sich bei der Antwort um eine Fehlerantwort, gibt diese Funktion ein standardmäßig konstruiertes ` Types[0] `-Objekt zurück, das möglicherweise nicht von einem gültigen Wert zu unterscheiden ist. Um zuverlässig festzustellen, ob die Nachricht ein Fehler war, verwenden Sie ` isError()`.
void QDBusPendingReply::waitForFinished()
Hält die Ausführung des aufrufenden Threads an, bis die Antwort empfangen und verarbeitet wurde. Nach der Rückgabe dieser Funktion sollte ` isFinished()` den Wert `true` zurückgeben, was anzeigt, dass der Inhalt der Antwort zur Verarbeitung bereit ist.
Siehe auch ` QDBusPendingCallWatcher::waitForFinished()`.
QDBusPendingReply::operator typename Select<0>::Type() const
Gibt das erste Argument dieser Antwort zurück, umgewandelt in den Typ „ Types[0] “ (den ersten Template-Parameter dieser Klasse). Dies entspricht dem Aufruf von ` argumentAt<0>()`.
Diese Funktion wird als Hilfsfunktion bereitgestellt und entspricht der Funktion ` QDBusReply::value()`.
Beachten Sie, dass diese Funktion, falls die Antwort noch nicht eingetroffen ist, den aufrufenden Thread blockiert, bis die Antwort verarbeitet wurde.
Handelt es sich bei der Antwort um eine Fehlerantwort, gibt diese Funktion ein standardmäßig initialisiertes ` Types[0] `-Objekt zurück, das möglicherweise nicht von einem gültigen Wert zu unterscheiden ist. Um zuverlässig festzustellen, ob die Nachricht ein Fehler war, verwenden Sie ` isError()`.
[implicit, since 6.10] int &QDBusPendingReply::operator=(QDBusPendingReply<Types...> &&other)
other „Move-assigns“ weist dieser „ QDBusPendingReply “-Instanz „ “ zu und hebt die Referenz auf den aktuellen ausstehenden Aufruf auf. Wenn die aktuelle Referenz auf einen noch nicht abgeschlossenen ausstehenden Aufruf verweist und dies die letzte Referenz ist, wird der ausstehende Aufruf abgebrochen, und es besteht keine Möglichkeit mehr, den Inhalt der Antwort abzurufen, sobald diese eintrifft.
Diese Funktion wurde in Qt 6.10 eingeführt.
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)
Bewirkt, dass dieses Objekt seinen Inhalt aus der Nachricht „ message “ übernimmt und die Referenz auf den aktuellen ausstehenden Aufruf aufhebt. Wenn die aktuelle Referenz auf einen noch nicht abgeschlossenen ausstehenden Aufruf verweist und dies die letzte Referenz ist, wird der ausstehende Aufruf abgebrochen, und es besteht keine Möglichkeit mehr, den Inhalt der Antwort abzurufen, sobald dieser eintrifft.
Nachdem diese Funktion beendet ist, befindet sich das „ QDBusPendingReply “-Objekt im Status „finished“ und auf den Inhalt von „ message “ kann zugegriffen werden.
Siehe auch isFinished().
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)
Bewirkt, dass dieses Objekt seinen Inhalt aus dem ausstehenden Aufruf „ call “ bezieht und die Referenz auf den aktuellen ausstehenden Aufruf aufhebt. Wenn die aktuelle Referenz auf einen noch nicht abgeschlossenen ausstehenden Aufruf verweist und dies die letzte Referenz ist, wird der ausstehende Aufruf abgebrochen, und es gibt keine Möglichkeit mehr, den Inhalt der Antwort abzurufen, sobald dieser eintrifft.
[implicit] int &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)
Erstellt eine Kopie von „ other “ und hebt die Referenz auf den aktuellen ausstehenden Aufruf auf. Wenn die aktuelle Referenz auf einen noch nicht abgeschlossenen ausstehenden Aufruf verweist und dies die letzte Referenz ist, wird der ausstehende Aufruf abgebrochen, und es besteht keine Möglichkeit mehr, den Inhalt der Antwort abzurufen, sobald diese eintrifft.
© 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.