QDBusPendingReply Class
template <typename... Types> class QDBusPendingReplyQDBusPendingReplyクラスは、非同期メソッド呼び出しに対する応答を含んでいます。詳細...
Header: | #include <QDBusPendingReply> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake: | QT += dbus |
Inherits: | 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<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::Count | std::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types) | 返信が持つ引数の数 |
メンバ関数説明
QDBusPendingReply::QDBusPendingReply()
空の QDBusPendingReply オブジェクトを作成します。このリプライにQDBusPendingCall オブジェクトを割り当てないと、QDBusPendingReply は何もできません。すべての関数は失敗値を返します。
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
メッセージmessage から内容を取得する QDBusPendingReply オブジェクトを作成します。この場合、このオブジェクトはすでに終了した状態にあり、リプライの内容にアクセスできるようになります。
isFinished()も参照してください 。
QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)
call ペンディング中の非同期呼び出しから内容を取得する QDBusPendingReply オブジェクトを作成します。この QDBusPendingReply オブジェクトは、call と同じ保留呼び出し参照を共有する。
QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)
other QDBusPendingReplyオブジェクトのコピーを作成する。QDBusPendingCall やQDBusPendingCallWatcher と同様に、この 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 のコピーを作成し、現在の保留中の呼への参照を削除する。現在の参照が未完了の保留中の呼に対するもので、これが最後の参照である場合、 保留中の呼はキャンセルされ、返信の内容が到着したときにそれを取得する手 段はなくなる。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。