QDBusAbstractInterface Class

Die Klasse QDBusAbstractInterface ist die Basisklasse für alle D-Bus-Schnittstellen in der Bindung Qt D-Bus und ermöglicht den Zugriff auf entfernte Schnittstellen. Mehr...

Kopfzeile: #include <QDBusAbstractInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus
Vererbt: QObject
Vererbt von:

QDBusConnectionInterface und QDBusInterface

Öffentliche Funktionen

virtual ~QDBusAbstractInterface()
QDBusPendingCall asyncCall(const QString &method, Args &&... args)
QDBusPendingCall asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args)
QDBusMessage call(const QString &method, Args &&... args)
QDBusMessage call(QDBus::CallMode mode, const QString &method, Args &&... args)
QDBusMessage callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args)
bool callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)
bool callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot)
QDBusConnection connection() const
QString interface() const
(since 6.7) bool isInteractiveAuthorizationAllowed() const
bool isValid() const
QDBusError lastError() const
QString path() const
QString service() const
(since 6.7) void setInteractiveAuthorizationAllowed(bool enable)
void setTimeout(int timeout)
int timeout() const

Detaillierte Beschreibung

Generierte Code-Klassen leiten sich ebenfalls von QDBusAbstractInterface ab, alle hier beschriebenen Methoden sind auch für generierte Code-Klassen gültig. Zusätzlich zu den hier beschriebenen Methoden stellen generierte Code-Klassen Member-Funktionen für die Remote-Methoden zur Verfügung, die eine Compile-Time-Prüfung der korrekten Parameter und Rückgabewerte sowie eine Anpassung der Eigenschaftstypen und Signalparameter ermöglichen.

Siehe auch Der QDBus-Compiler und QDBusInterface.

Dokumentation der Mitgliedsfunktionen

[virtual noexcept] QDBusAbstractInterface::~QDBusAbstractInterface()

Gibt die Ressourcen dieses Objekts frei.

template <typename... Args> QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, Args &&... args)

Ruft die Methode method auf dieser Schnittstelle auf und übergibt args an die Methode. Alle args müssen in QVariant konvertierbar sein.

Die Parameter von call werden über den D-Bus als Eingangsargumente an die entfernte Funktion weitergereicht. Das zurückgegebene QDBusPendingCall Objekt kann verwendet werden, um Informationen über die Antwort herauszufinden.

Es kann auf folgende Weise verwendet werden:

QDBusPendingCall pcall = interface->asyncCall("GetAPIVersion"_L1);
auto watcher = new QDBusPendingCallWatcher(pcall, this);

QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this,
                 [&](QDBusPendingCallWatcher *w) {
    QString value = retrieveValue();
    QDBusPendingReply<int> reply(*w);
    QDBusPendingCall pcall;
    if (reply.argumentAt<0>() >= 14)
        pcall = interface->asyncCall("ProcessWorkUnicode"_L1, value);
    else
        pcall = interface->asyncCall("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());

    w = new QDBusPendingCallWatcher(pcall);
    QObject::connect(w,  &QDBusPendingCallWatcher::finished, this,
                     &Abstract_DBus_Interface::callFinishedSlot);
});

Dieses Beispiel veranschaulicht den Funktionsaufruf mit 0, 1 und 2 Parametern und veranschaulicht die verschiedenen Parametertypen, die jeweils übergeben werden (der erste Aufruf von "ProcessWorkUnicode" enthält eine Unicode-Zeichenfolge, der zweite Aufruf von "ProcessWork" enthält eine Zeichenfolge und ein Byte-Array). Siehe call() für das gleiche Beispiel bei blockierenden (synchronen) Aufrufen.

Hinweis: Vor Qt 5.14 akzeptierte diese Funktion nur maximal acht (8) Argumente.

Hinweis: Methodenaufrufe an lokale QDBusServer's sind aufgrund von Implementierungsbeschränkungen niemals asynchron.

Siehe auch asyncCallWithArgumentList().

QDBusPendingCall QDBusAbstractInterface::asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args)

Ruft die durch method angegebene Remote-Methode an dieser Schnittstelle auf und verwendet args als Argumente. Diese Funktion gibt ein QDBusPendingCall Objekt zurück, das verwendet werden kann, um den Status der Antwort zu verfolgen und auf ihren Inhalt zuzugreifen, sobald sie eingetroffen ist.

Normalerweise sollten Sie Aufrufe mit asyncCall() tätigen.

Hinweis: Methodenaufrufe an Objekte, die von der Anwendung selbst registriert wurden, sind aufgrund von Implementierungsbeschränkungen niemals asynchron.

Hinweis: Diese Funktion ist thread-sicher.

template <typename... Args> QDBusMessage QDBusAbstractInterface::call(const QString &method, Args &&... args)

Ruft die Methode method auf dieser Schnittstelle auf und übergibt args an die Methode. Alle args müssen in QVariant konvertierbar sein.

Die Parameter von call werden über den D-Bus als Eingangsargumente an die entfernte Funktion weitergereicht. Die Ausgangsargumente werden in der Antwort QDBusMessage zurückgegeben. Handelt es sich bei der Antwort um eine Fehlerantwort, wird lastError() auch auf den Inhalt der Fehlermeldung gesetzt.

Sie kann auf folgende Weise verwendet werden:

QString value = retrieveValue();
QDBusMessage reply;

QDBusReply<int> api = interface->call("GetAPIVersion"_L1);
if (api >= 14)
  reply = interface->call("ProcessWorkUnicode"_L1, value);
else
  reply = interface->call("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());

Dieses Beispiel veranschaulicht Funktionsaufrufe mit 0, 1 und 2 Parametern und veranschaulicht unterschiedliche Parametertypen, die jeweils übergeben werden (der erste Aufruf von "ProcessWorkUnicode" enthält einen Unicode-String, der zweite Aufruf von "ProcessWork" enthält einen String und ein Byte-Array). Siehe asyncCall() für das gleiche Beispiel bei nicht-blockierenden (asynchronen) Aufrufen.

Hinweis: Vor Qt 5.14 akzeptierte diese Funktion nur maximal acht (8) Argumente.

Siehe auch callWithArgumentList().

template <typename... Args> QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &method, Args &&... args)

Dies ist eine überladene Funktion.

Ruft die Methode method auf dieser Schnittstelle auf und übergibt args an die Methode. Alle args müssen in QVariant konvertierbar sein.

Wenn mode gleich NoWaitForReply ist, dann kehrt diese Funktion sofort nach dem Aufruf zurück, ohne auf eine Antwort der entfernten Methode zu warten. Andernfalls gibt mode an, ob diese Funktion die Qt Event Loop aktivieren soll, während sie auf die Antwort wartet.

Wenn diese Funktion erneut in die Qt-Ereignisschleife eintritt, um auf die Antwort zu warten, schließt sie die Benutzereingabe aus. Während des Wartens kann sie Signale und andere Methodenaufrufe an Ihre Anwendung liefern. Daher muss sie darauf vorbereitet sein, eine Wiederholung zu behandeln, wenn ein Aufruf mit call() erfolgt.

Hinweis: Vor Qt 5.14 akzeptierte diese Funktion nur maximal acht (8) Argumente.

Siehe auch callWithArgumentList().

QDBusMessage QDBusAbstractInterface::callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args)

Ruft die durch method angegebene Fernmethode auf dieser Schnittstelle auf und verwendet args als Argumente. Diese Funktion gibt die Nachricht zurück, die als Antwort empfangen wurde. Dies kann eine normale QDBusMessage::ReplyMessage (die den Erfolg anzeigt) oder QDBusMessage::ErrorMessage (wenn der Aufruf fehlgeschlagen ist) sein. Der Parameter mode gibt an, wie dieser Aufruf platziert werden soll.

Wenn der Aufruf erfolgreich war, wird lastError() gelöscht; andernfalls enthält es den Fehler, den dieser Aufruf verursacht hat.

Normalerweise sollten Sie Aufrufe mit call() platzieren.

Warnung: Wenn Sie UseEventLoop verwenden, muss Ihr Code darauf vorbereitet sein, mit eventuellen Wiederholungen umzugehen: andere Methodenaufrufe und Signale können geliefert werden, bevor diese Funktion zurückkehrt, ebenso wie andere Signale und Ereignisse in der Warteschlange von Qt.

Hinweis: Diese Funktion ist thread-sicher.

bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)

Ruft die durch method angegebene Remote-Methode an dieser Schnittstelle auf und verwendet args als Argumente. Diese Funktion kehrt sofort zurück, nachdem sie den Aufruf in die Warteschlange gestellt hat. Die Antwort der entfernten Funktion wird an die returnMethod auf dem Objekt receiver geliefert. Tritt ein Fehler auf, wird stattdessen die Funktion errorMethod auf dem Objekt receiver aufgerufen.

Diese Funktion gibt true zurück, wenn das Einreihen in die Warteschlange erfolgreich war. Sie gibt nicht an, dass der ausgeführte Aufruf erfolgreich war. Schlägt sie fehl, wird errorMethod aufgerufen. Wenn das Einreihen in die Warteschlange fehlgeschlagen ist, gibt diese Funktion false zurück und es wird kein Slot aufgerufen.

Die Funktion returnMethod muss als Parameter die vom Funktionsaufruf zurückgegebenen Typen haben. Optional kann sie einen QDBusMessage Parameter als letzten oder einzigen Parameter haben. Der errorMethod muss einen QDBusError als einzigen Parameter haben.

Hinweis: Methodenaufrufe an Objekte, die von der Anwendung selbst registriert werden, sind aufgrund von Implementierungsbeschränkungen niemals asynchron.

Siehe auch QDBusError und QDBusMessage.

bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot)

Dies ist eine überladene Funktion.

Diese Funktion ist veraltet. Bitte verwenden Sie die überladene Version.

Ruft die durch method angegebene Fernmethode an dieser Schnittstelle auf und verwendet args als Argumente. Diese Funktion kehrt sofort zurück, nachdem sie den Aufruf in die Warteschlange gestellt hat. Die Antwort der entfernten Funktion oder eventuelle Fehler, die von ihr ausgegeben werden, werden an den slot Slot auf dem Objekt receiver geliefert.

Diese Funktion gibt true zurück, wenn das Einreihen in die Warteschlange erfolgreich war: Sie zeigt nicht an, dass der Aufruf erfolgreich war. Wenn sie fehlgeschlagen ist, wird der Slot mit einer Fehlermeldung aufgerufen. lastError() wird unter diesen Umständen nicht gesetzt.

Siehe auch QDBusError und QDBusMessage.

QDBusConnection QDBusAbstractInterface::connection() const

Gibt die Verbindung zurück, mit der diese Schnittstelle verbunden ist.

QString QDBusAbstractInterface::interface() const

Gibt den Namen dieser Schnittstelle zurück.

[since 6.7] bool QDBusAbstractInterface::isInteractiveAuthorizationAllowed() const

Gibt zurück, ob der Aufrufer bei asynchronen Aufrufen bereit ist, auf eine interaktive Autorisierung zu warten.

Der Standardwert ist false.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch setInteractiveAuthorizationAllowed() und QDBusMessage::setInteractiveAuthorizationAllowed().

bool QDBusAbstractInterface::isValid() const

Gibt true zurück, wenn dies ein gültiger Verweis auf ein entferntes Objekt ist. Es wird false zurückgegeben, wenn bei der Erstellung dieser Schnittstelle ein Fehler aufgetreten ist (z. B. wenn die entfernte Anwendung nicht existiert).

Hinweis: Beim Umgang mit entfernten Objekten ist es nicht immer möglich, bei der Erstellung einer QDBusInterface festzustellen, ob sie existiert.

QDBusError QDBusAbstractInterface::lastError() const

Gibt den Fehler zurück, den die letzte Operation verursacht hat, oder einen ungültigen Fehler, wenn die letzte Operation keinen Fehler verursacht hat.

QString QDBusAbstractInterface::path() const

Gibt den Objektpfad zurück, mit dem diese Schnittstelle verknüpft ist.

QString QDBusAbstractInterface::service() const

Gibt den Namen des Dienstes zurück, mit dem diese Schnittstelle verknüpft ist.

[since 6.7] void QDBusAbstractInterface::setInteractiveAuthorizationAllowed(bool enable)

Legt fest, ob der Aufrufer bei asynchronen Aufrufen bereit ist, auf eine interaktive Autorisierung zu warten.

Wenn enable auf true gesetzt ist, setzen die D-Bus-Nachrichten, die für asynchrone Aufrufe über diese Schnittstelle erzeugt werden, das Flag ALLOW_INTERACTIVE_AUTHORIZATION.

Dieses Flag ist nur sinnvoll, wenn unprivilegierter Code einen privilegierteren Methodenaufruf tätigt und ein Autorisierungs-Framework eingesetzt wird, das möglicherweise eine interaktive Autorisierung ermöglicht.

Der Standardwert ist false.

Diese Funktion wurde in Qt 6.7 eingeführt.

Siehe auch isInteractiveAuthorizationAllowed() und QDBusMessage::setInteractiveAuthorizationAllowed().

void QDBusAbstractInterface::setTimeout(int timeout)

Setzt den Timeout in Millisekunden für alle zukünftigen DBus-Aufrufe an timeout. -1 bedeutet den Standard-DBus-Timeout (normalerweise 25 Sekunden).

Siehe auch timeout().

int QDBusAbstractInterface::timeout() const

Gibt den aktuellen Wert des Timeouts in Millisekunden zurück. -1 bedeutet den Standard-DBus-Timeout (normalerweise 25 Sekunden).

Siehe auch setTimeout().

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