QDBusContext Class

QDBusContextクラスは、スロットが呼び出しのD-Busコンテキストを決定することを可能にします。詳細...

Header: #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は、アダプタではなく、実際のオブジェクトの中に現れるべきです。アダプタ・コードからコンテキストを決定する必要がある場合は、public 継承を使用し、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 が真の場合、Qt D-Bus は自動返信を生成しません。また、スロットからの戻り値や出力パラメータも無視されます。代わりに、呼び出されたオブジェクトは、受信メッセージを保存し、後で返信またはエラーを送信する責任があります。

返信を送信しないと、D-Busによって自動タイムアウト・エラーが生成されます。

isDelayedReply()も参照してください

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。