QDBusPendingReply Class

template <typename... Types> class QDBusPendingReply

QDBusPendingReplyクラスは、非同期メソッド呼び出しに対する応答を含んでいます。詳細...

ヘッダー #include <QDBusPendingReply>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus
を継承する:QDBusPendingReplyBase

パブリックな型

enum anonymous { Count }

パブリック関数

QDBusPendingReply()
QDBusPendingReply(const QDBusMessage &message)
QDBusPendingReply(const QDBusPendingCall &call)
QDBusPendingReply(const QDBusPendingReply<Types...> &other)
QVariant argumentAt(int index) const
int count() const
QDBusError error() const
bool isError() const
bool isFinished() const
bool isValid() const
QDBusMessage reply() const
typename Select<0>::Type value() const
void waitForFinished()
typename Select<0>::Type operator typename Select<0>::Type() const
QDBusPendingReply<Types...> &operator=(const QDBusMessage &message)
QDBusPendingReply<Types...> &operator=(const QDBusPendingCall &call)
QDBusPendingReply<Types...> &operator=(const QDBusPendingReply<Types...> &other)

詳細説明

QDBusPendingReply は変種テンプレート・クラスです。テンプレート・パラメータは、リプライのデータ・コンテンツを抽出するために使用される型です。

このクラスの機能はQDBusReply と似ていますが、2 つの重要な違いがあります:

  • QDBusReply QDBusPendingReply は任意の数の型を持つことができますが、返り値の型は 1 つだけです。
  • QDBusReply QDBusPendingReply では保留中の呼び出しからの応答を待つことができる。

QDBusReply

QDBusReply<QString> reply = interface->call("RemoteMethod");
if (reply.isValid())
    // use the returned value
    useValue(reply.value());
else
    // call failed. Show an error condition.
    showError(reply.error());

QDBusPendingReplyを使用する場合、同等のコード(返信のブロック待ちを含む)は次のようになります:

    QDBusPendingReply<QString> reply = iface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (reply.isError())
        // call failed. Show an error condition.
        showErrorD(reply.error());
    else
        // use the returned value
        useValue(reply.value());

複数の出力引数を持つメソッド呼び出しの場合、QDBusReply では次のように書く:

reply = interface->call("RemoteMethod");

一方、QDBusPendingReplyでは、出力引数はすべてテンプレート・パラメータでなければなりません:

    QDBusPendingReply<bool, QString> reply = iface->asyncCall("RemoteMethod");
    reply.waitForFinished();
    if (!reply.isError()) {
        if (reply.argumentAt<0>())
            showSuccess(reply.argumentAt<1>());
        else
            showFailure(reply.argumentAt<1>());
    }

QDBusPendingReplyオブジェクトはQDBusPendingCallWatcher オブジェクトと関連付けることができ、リプライが到着するとシグナルを発する。

QDBusPendingCallWatcher およびQDBusReplyも参照のこと

メンバ型ドキュメント

enum QDBusPendingReply::anonymous

定数説明
QDBusPendingReply::Countstd::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types)返答が持つと予想される引数の数

メンバ関数ドキュメント

QDBusPendingReply::QDBusPendingReply()

空の QDBusPendingReply オブジェクトを作成します。このリプライにQDBusPendingCall オブジェクトを割り当てないと、QDBusPendingReply は何もできません。すべての関数は失敗値を返します。

QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)

メッセージから内容を取得する QDBusPendingReply オブジェクトを作成しますmessage 。この場合、このオブジェクトはすでに終了した状態にあり、返信の内容にアクセスできるようになります。

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

QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)

call ペンディング中の非同期呼び出しから内容を取得するQDBusPendingReply オブジェクトを作成する。このQDBusPendingReplyオブジェクトは、call と同じペンディング・コール参照を共有する。

QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)

other QDBusPendingReplyオブジェクトのコピーを作成する。QDBusPendingCallQDBusPendingCallWatcher と同様に、この QDBusPendingReply オブジェクトは同じペンディング・コール参照を共有します。すべてのコピーは同じ戻り値を共有します。

QVariant QDBusPendingReply::argumentAt(int index) const

リプライの内容のindex の位置にある引数を返す。リプライにそれだけのエレメントがない場合、この関数の返り値は未定義(おそらくアサーションに失敗する)なので、処理が終了してリプライが有効であることを確認することが重要です。

リプライの位置index に引数が含まれていない場合、またはリプライがエラーの場合、この関数は無効なQVariant を返します。D-Bus メッセージに無効な QVariants が含まれることはないため、この戻り値を使用してエラー状態を検出できます。

[constexpr] int QDBusPendingReply::count() const

返信が持つはずの引数の数を返します。この数は、このクラスの非ボイド・テンプレート・パラメータの数と一致します。

もしリプライが異なる数の引数(または異なる型)で到着した場合、不正なシグネチャを示すエラー・リプライに変換されます。

QDBusError QDBusPendingReply::error() const

返信メッセージの処理が終了していれば、そのエラーの内容を取り出す。リプライ・メッセージの処理が終了していない場合、またはリプライ・メッセージに通常のリプライ・メッセージ(非エラー)が含まれている場合、この関数は無効なQDBusError を返します。

bool QDBusPendingReply::isError() const

リプライにエラーメッセージが含まれる場合はtrue を返し、通常のメソッドのリプライが含まれる場合は false を返す。

保留中の呼び出しの処理が終了していない場合、この関数はtrue も返す。

bool QDBusPendingReply::isFinished() const

保留中の呼の処理が終了し、応答を受信した場合、true を返す。この関数がtrue を返す場合、isError()、error()、reply() メソッドは有効な情報を返すはずである。

この関数は、waitForFinished() を呼び出した場合、または外部 D-Bus イベントが発生した場合にのみ状態を変更することに注意してください(一般的には、イベント・ループの実行に戻った場合にのみ発生します)。

QDBusPendingCallWatcher::isFinished()も参照

bool QDBusPendingReply::isValid() const

リプライに通常のリプライ・メッセージが含まれている場合はtrue を返し、それ以外のものが含まれている場合は false を返す。

保留中の呼び出しの処理が終了していない場合、この関数はfalseを返します。

QDBusMessage QDBusPendingReply::reply() const

送信された非同期呼の処理が終了していれば、受信した応答メッセージを取 得する。保留中の呼び出しが終了していない場合、この関数はQDBusMessage::InvalidMessage 型のQDBusMessage を返します。

処理が終了すると、メッセージ・タイプはエラー・メッセージか通常のメソッド応答メッセージのいずれかになります。

typename Select<0>::Type QDBusPendingReply::value() const

このリプライの最初の引数を、Types[0] (このクラスの最初のテンプレート・パラメータ)型にキャストして返します。これはargumentAt<0>() を呼び出すのと同じです。

この関数はQDBusReply::value() 関数にマッチする便宜的なものとして提供されています。

リプライが到着していない場合、この関数はリプライが処理されるまで呼び出し元のスレッドをブロックさせることに注意してください。

リプライがエラー・リプライの場合、この関数はデフォルトで構築されたTypes[0] オブジェクトを返す。メッセージがエラーであるかどうかを確実に判断するには、isError() を使用する。

void QDBusPendingReply::waitForFinished()

応答を受信して処理するまで、呼び出し元のスレッドの実行を一時停止する。この関数が戻った後、isFinished() は真を返すはずである。これは、リプライの内容を処理する準備ができたことを示す。

QDBusPendingCallWatcher::waitForFinished()も参照のこと

typename Select<0>::Type QDBusPendingReply::operator typename Select<0>::Type() const

このリプライの最初の引数を、Types[0] (このクラスの最初のテンプレート・パラメータ)型にキャストして返します。これはargumentAt<0>() を呼び出すのと同じです。

この関数はQDBusReply::value() 関数にマッチする便宜的なものとして提供されています。

リプライが到着していない場合、この関数はリプライが処理されるまで呼び出し元のスレッドをブロックさせることに注意してください。

リプライがエラー・リプライの場合、この関数はデフォルトで構築されたTypes[0] オブジェクトを返す。メッセージがエラーであるかどうかを確実に判断するには、isError() を使用する。

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)

このオブジェクトは、message メッセージから内容を取得し、現在の保留中の呼への参照を削除する。現在の参照が未完了の保留呼び出しに対するものであり、これが最後の参照である場合、保留呼び出しはキャンセルされ、返信の内容が到着しても、それを取得する方法はない。

この関数が終了すると、QDBusPendingReply オブジェクトは「完了」状態になり、message の内容にアクセスできるようになる。

isFinished()も参照のこと

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)

このオブジェクトは、call 保留中の呼び出しから内容を取得し、現在の 保留中の呼び出しへの参照を削除する。現在の参照が未完了の保留中の呼び出しに対するもので、これが最後の参照である場合、保留中の呼び出しはキャンセルされ、応答の内容が到着しても、それを取得する方法はない。

QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)

other のコピーを作成し、現在の保留中の呼への参照を削除する。現在の参照が未完了のペンディングコールに 対するもので、これが最後の参照である場合、ペンディングコールはキャンセルされ、 応答の内容が到着しても、それを取得する方法はない。

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