このページでは

QDBusContext Class

QDBusContext クラスを使用すると、スロットで呼び出しの D-Bus コンテキストを判別することができます。詳細...

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

パブリック関数

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

詳細な説明

シグナルの配信やリモートメソッド呼び出しによってオブジェクトのスロットが呼び出された際、それが発生したコンテキストを知る必要がある場合があります。特に、スロットが返信を後ほど送信することにした場合や、エラーで返信することにした場合には、そのコンテキストが必要となります。

QDBusContextクラスは、Qt D-Bus XMLコンパイラ(qdbusxml2cpp)によって生成されたコードを変更することなく、コンテキストにアクセスするための代替手段です。

QDBusContext は、QDBusConnection::registerObject() を使用してエクスポートされるオブジェクトをサブクラス化することで利用されます。以下の例はその使用方法を示しています:

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();
}

この例では、エラー応答の送信と遅延応答という、2つの典型的な使用法を示しています。

注:QDBusContextとQDBusAbstractAdaptor を同時にサブクラス化しないでください。QDBusContextはアダプタではなく、実際のオブジェクト内に存在する必要があります。アダプタのコードからコンテキストを特定する必要がある場合は、パブリック継承を使用し、QObject::parent()を介して関数にアクセスしてください。

メンバ関数のドキュメント

QDBusContext::QDBusContext()

空の QDBusContext を生成します。

[noexcept] QDBusContext::~QDBusContext()

空のデストラクタ。

bool QDBusContext::calledFromDBus() const

D-Bus 呼び出しを処理中の場合は、true を返します。この関数がtrue を返した場合、このクラスの残りの関数を利用できます。

この関数が `false ` を返しているときにこれらの関数にアクセスすると、挙動は未定義となり、クラッシュの原因となる可能性があります。

QDBusConnection QDBusContext::connection() const

この呼び出しを受信した接続を返します。

bool QDBusContext::isDelayedReply() const

この呼び出しで応答が遅延する場合、true を返します。

setDelayedReply()も参照してください 。

const QDBusMessage &QDBusContext::message() const

この呼び出しを生成したメッセージを返します。

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

呼び出し元に対して、エラーname を応答として返します。オプションのmsg パラメータは、失敗の原因を説明する人間が読みやすいテキストです。

エラーが送信された場合、呼び出し元からの戻り値および呼び出されたスロットからの出力パラメータは、Qt D-Bus によって無視されます。

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

呼び出し元に対して、エラーtype を応答として返します。オプションのmsg パラメータは、失敗の原因を説明する人間が読みやすいテキストです。

エラーが送信された場合、呼び出し元からの戻り値および呼び出されたスロットからの出力パラメータは、Qt D-Bus によって無視されます。

これはオーバーロードされた関数です。

void QDBusContext::setDelayedReply(bool enable) const

この呼び出しで応答を遅延させるかどうかを設定します。

enable がfalseの場合、Qt D-Bus は、必要に応じて、呼び出されたスロットが返り値を返した直後に、呼び出し元への返信を自動的に生成します。

enable が true の場合、Qt D-Bus は自動応答を生成しません。また、スロットからの戻り値や出力パラメータも無視します。その代わりに、呼び出されたオブジェクトが受信メッセージを保存し、後で応答またはエラーを送信する責任を負います。

返信の送信に失敗すると、D-Bus によって自動タイムアウトエラーが発生します。

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.