QDBusContext Class

Mit der Klasse QDBusContext können Slots den D-Bus-Kontext der Aufrufe bestimmen. Mehr...

Kopfzeile: #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

Detaillierte Beschreibung

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

Die Klasse QDBusContext ist eine Alternative zum Zugriff auf den Kontext, die keine Änderung des vom Qt D-Bus XML-Compiler (qdbusxml2cpp) erzeugten Codes erfordert.

QDBusContext wird verwendet, indem es von den Objekten, die mit QDBusConnection::registerObject() exportiert werden, subclassifiziert wird. 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 Verwendungen, nämlich das Senden von Fehlerantworten und das Senden von verzögerten Antworten.

Hinweis: Unterklassifizieren Sie QDBusContext und QDBusAbstractAdaptor nicht gleichzeitig. QDBusContext sollte im eigentlichen Objekt erscheinen, nicht im Adapter. Wenn es notwendig ist, den Kontext über den Adaptor-Code zu bestimmen, verwenden Sie eine öffentliche Vererbung und greifen Sie auf die Funktionen über QObject::parent() zu.

Dokumentation der Mitgliedsfunktionen

QDBusContext::QDBusContext()

Konstruiert einen leeren QDBusContext.

[noexcept] QDBusContext::~QDBusContext()

Ein leerer Destruktor.

bool QDBusContext::calledFromDBus() const

Gibt true zurück, wenn wir einen D-Bus-Aufruf verarbeiten. Wenn diese Funktion true zurückgibt, sind die übrigen Funktionen dieser Klasse verfügbar.

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

QDBusConnection QDBusContext::connection() const

Gibt die Verbindung zurück, von der dieser Anruf empfangen wurde.

bool QDBusContext::isDelayedReply() const

Gibt true zurück, wenn dieser Aufruf eine verzögerte Antwort hat.

Siehe auch setDelayedReply().

const QDBusMessage &QDBusContext::message() const

Gibt die Nachricht 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 von Menschen lesbarer Text, der den Fehler erklärt.

Wenn ein Fehler gesendet wird, 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

Dies ist eine überladene Funktion.

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

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

void QDBusContext::setDelayedReply(bool enable) const

Legt fest, ob dieser Aufruf eine verzögerte Antwort haben wird oder nicht.

Wenn enable false ist, wird Qt D-Bus automatisch eine Antwort an den Aufrufer generieren, sobald der aufgerufene Slot zurückkehrt.

Wenn enable wahr ist, erzeugt Qt D-Bus keine automatischen Antworten. Es wird auch den Rückgabewert des Slots und alle Ausgabeparameter ignorieren. Stattdessen ist das aufgerufene Objekt für die Speicherung der eingehenden Nachricht verantwortlich und sendet eine Antwort oder einen Fehler zu einem späteren Zeitpunkt.

Wird keine Antwort gesendet, führt dies zu einem automatischen Timeout-Fehler, der von D-Bus erzeugt wird.

Siehe auch isDelayedReply().

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