Auf dieser Seite

QDBusContext Class

Die Klasse „QDBusContext“ ermöglicht es Slots, den D-Bus-Kontext der Aufrufe zu ermitteln. Mehr dazu...

Header: #include <QDBusContext>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus

Öffentliche Funktionen

QDBusContext()
~QDBusContext()
bool calledFromDBus() const
QDBusConnection connection() const
bool isDelayedReply() const
const QDBusMessage &message() const
void sendErrorReply(const QString &name, const QString &msg = QString()) const
void sendErrorReply(QDBusError::ErrorType type, const QString &msg = QString()) const
void setDelayedReply(bool enable) const

Ausführliche Beschreibung

Wenn ein Slot in einem Objekt aufgrund einer Signalübermittlung oder eines Remote-Methodenaufrufs aufgerufen wird, ist es manchmal notwendig, den Kontext zu kennen, in dem dies geschehen ist. Insbesondere wenn der Slot feststellt, dass er die Antwort zu einem späteren Zeitpunkt senden möchte oder wenn er mit einem Fehler antworten möchte, wird der Kontext benötigt.

Die Klasse `QDBusContext` ist eine Alternative für den Zugriff auf den Kontext, bei der der vom XML-Compiler „Qt D-Bus “ (qdbusxml2cpp) generierte Code nicht geändert werden muss.

QDBusContext wird verwendet, indem man die über ` QDBusConnection::registerObject()` exportierten Objekte damit unterklassifiziert. Das folgende Beispiel veranschaulicht die Verwendung:

class MyObject: public QObject,
                protected QDBusContext
{
    Q_OBJECT

    QDBusConnection conn;
    QDBusMessage msg;

    //...

protected slots:
    void process();
public slots:
    void methodWithError();
    QString methodWithDelayedReply();
};

void MyObject::methodWithError()
{
    sendErrorReply(QDBusError::NotSupported,
                   "The method call 'methodWithError()' is not supported");
}

QString MyObject::methodWithDelayedReply()
{
    conn = connection();
    msg = message();
    setDelayedReply(true);
    QMetaObject::invokeMethod(this, &MyObject::process, Qt::QueuedConnection);
    return QString();
}

Das Beispiel veranschaulicht die beiden typischen Anwendungsfälle: das Senden von Fehlerantworten und das Senden von verzögerten Antworten.

Hinweis: Erstellen Sie keine Unterklassen von QDBusContext und QDBusAbstractAdaptor gleichzeitig. QDBusContext sollte im eigentlichen Objekt vorkommen, nicht im Adapter. Wenn es im Adaptercode notwendig ist, den Kontext zu ermitteln, verwenden Sie eine öffentliche Vererbung und greifen Sie über QObject::parent() auf die Funktionen zu.

Dokumentation der Mitgliedsfunktionen

QDBusContext::QDBusContext()

Erstellt einen leeren QDBusContext.

[noexcept] QDBusContext::~QDBusContext()

Ein leerer Destruktor.

bool QDBusContext::calledFromDBus() const

Gibt „ true “ zurück, wenn ein D-Bus-Aufruf verarbeitet wird. Wenn diese Funktion „ true “ zurückgibt, stehen die übrigen Funktionen dieser Klasse zur Verfügung.

Der Zugriff auf diese Funktionen, wenn diese Funktion false zurückgibt, ist nicht definiert und kann zu Abstürzen führen.

QDBusConnection QDBusContext::connection() const

Gibt die Verbindung zurück, über die dieser Aufruf eingegangen ist.

bool QDBusContext::isDelayedReply() const

Gibt „ true “ zurück, wenn dieser Aufruf eine verzögerte Antwort liefert.

Siehe auch setDelayedReply().

const QDBusMessage &QDBusContext::message() const

Gibt die Meldung zurück, die diesen Aufruf ausgelöst hat.

void QDBusContext::sendErrorReply(const QString &name, const QString &msg = QString()) const

Sendet einen Fehler name als Antwort an den Aufrufer. Der optionale Parameter „ msg “ ist ein für Menschen lesbarer Text, der den Fehler erklärt.

Wird ein Fehler gesendet, werden der Rückgabewert und alle Ausgabeparameter des aufgerufenen Slots von ` Qt D-Bus` ignoriert.

void QDBusContext::sendErrorReply(QDBusError::ErrorType type, const QString &msg = QString()) const

Sendet einen Fehler type als Antwort an den Aufrufer. Der optionale Parameter ` msg ` ist ein für Menschen lesbarer Text, der den Fehler erklärt.

Wird ein Fehler gesendet, werden der Rückgabewert und alle Ausgabeparameter des aufgerufenen Slots von ` Qt D-Bus` ignoriert.

Dies ist eine überladene Funktion.

void QDBusContext::setDelayedReply(bool enable) const

Legt fest, ob dieser Aufruf eine verzögerte Antwort erhält oder nicht.

Ist „ enable “ auf „false“ gesetzt, generiert „ Qt D-Bus “ bei Bedarf automatisch eine Antwort an den Aufrufer, sobald der aufgerufene Slot zurückkehrt.

Ist „ enable “ auf „true“ gesetzt, generiert „ Qt D-Bus “ keine automatischen Antworten. Außerdem werden der Rückgabewert des Slots sowie alle Ausgabeparameter ignoriert. Stattdessen ist das aufgerufene Objekt dafür verantwortlich, die eingehende Nachricht zu speichern und zu einem späteren Zeitpunkt eine Antwort oder eine Fehlermeldung zu senden.

Wird keine Antwort gesendet, löst D-Bus automatisch einen Timeout-Fehler aus.

Siehe auch isDelayedReply().

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