QDBusPendingReply Class
QDBusPendingReply クラスは、非同期メソッド呼び出しに対する応答を保持しています。詳細...
| ヘッダー: | #include <QDBusPendingReply> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
| qmake: | QT += dbus |
| 継承元: | QDBusPendingReplyBase |
パブリック型
| enum { Count } |
パブリック関数
| QDBusPendingReply() | |
| QDBusPendingReply(const QDBusMessage &message) | |
| QDBusPendingReply(const QDBusPendingCall &call) | |
| QDBusPendingReply(const QDBusPendingReply<Types...> &other) | |
(since 6.10) | QDBusPendingReply(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() |
| operator typename Select<0>::Type() const | |
(since 6.10) int & | operator=(QDBusPendingReply<Types...> &&other) |
| QDBusPendingReply<Types...> & | operator=(const QDBusMessage &message) |
| QDBusPendingReply<Types...> & | operator=(const QDBusPendingCall &call) |
| int & | operator=(const QDBusPendingReply<Types...> &other) |
詳細な説明
QDBusPendingReply は、可変引数テンプレートクラスです。テンプレートパラメータは、応答データのコンテンツを抽出するために使用される型です。
このクラスは機能面でQDBusReply と似ていますが、2つの重要な違いがあります。
- QDBusReply は、戻り値の型を正確に1つしか受け付けないのに対し、QDBusPendingReplyは任意の数の型を持つことができます
- QDBusReply xml-ph-0000@deepl.internalはすでに完了した応答に対してのみ動作するのに対し、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も参照してください 。
メンバ型のドキュメント
[anonymous] enum
| 定数 | 値 | 説明 |
|---|---|---|
QDBusPendingReply::Count | std::is_same_v<typename Select<0>::Type, void> ? 0 : sizeof...(Types) | 応答に含まれることが想定される引数の数 |
メンバ関数のドキュメント
[default] QDBusPendingReply::QDBusPendingReply()
空の QDBusPendingReply オブジェクトを作成します。この返信オブジェクトにQDBusPendingCall オブジェクトを割り当てない限り、QDBusPendingReply は何も実行できません。すべての関数は、失敗値を返します。
QDBusPendingReply::QDBusPendingReply(const QDBusMessage &message)
メッセージ `message` の内容を取得する `QDBusPendingReply` オブジェクトを作成します。この場合、このオブジェクトはすでに完了状態になっており、応答の内容にアクセス可能になります。
isFinished()も参照してください 。
QDBusPendingReply::QDBusPendingReply(const QDBusPendingCall &call)
call の保留中の非同期呼び出しから内容を取得するQDBusPendingReplyオブジェクトを作成します。このQDBusPendingReplyオブジェクトは、call と同じ保留中の呼び出し参照を共有します。
[implicit] QDBusPendingReply::QDBusPendingReply(const QDBusPendingReply<Types...> &other)
other のQDBusPendingReplyオブジェクトのコピーを作成します。QDBusPendingCall やQDBusPendingCallWatcher と同様に、このQDBusPendingReplyオブジェクトも、同じ保留中の呼び出し参照を共有します。すべてのコピーは同じ戻り値を共有します。
[implicit, since 6.10] QDBusPendingReply::QDBusPendingReply(QDBusPendingReply<Types...> &&other)
Moves—other から新しい QDBusPendingReply を生成します。
この関数は Qt 6.10 で導入されました。
QVariant QDBusPendingReply::argumentAt(int index) const
応答の内容のうち、index の位置にある引数を返します。応答にそれだけの要素が含まれていない場合、この関数の戻り値は未定義となります(おそらくアサーション違反が発生します)。そのため、処理が完了しており、応答が有効であることを確認することが重要です。
返信にindex の位置に引数が含まれていない場合、または返信がエラーであった場合、この関数は無効なQVariant を返します。D-Busメッセージには無効なQVariantが含まれることは決してないため、この戻り値を用いてエラー状態を検出することができます。
[constexpr] int QDBusPendingReply::count() const
応答が持つべき引数の数を返します。この数は、このクラスに含まれる非void型のテンプレートパラメータの数と一致します。
もし、返信の引数の数が異なる(または型が異なる)場合、その返信はシグネチャ不一致を示すエラー返信に変換されます。
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() は true を返す必要があります。これは、応答の内容が処理可能な状態になったことを示します。
QDBusPendingCallWatcher::waitForFinished()も参照してください 。
QDBusPendingReply::operator typename Select<0>::Type() const
この応答の最初の引数を、Types[0] 型(このクラスの最初のテンプレートパラメータ)にキャストして返します。これは、argumentAt<0>()を呼び出すのと同じです。
この関数は、QDBusReply::value() 関数と互換性を持たせるための便宜上提供されています。
なお、応答がまだ到着していない場合、この関数は応答が処理されるまで呼び出し元スレッドをブロックします。
応答がエラー応答の場合、この関数はデフォルト構築されたTypes[0] オブジェクトを返しますが、これは有効な値と見分けがつかない場合があります。メッセージがエラーであったかどうかを確実に判断するには、isError() を使用してください。
[implicit, since 6.10] int &QDBusPendingReply::operator=(QDBusPendingReply<Types...> &&other)
other をこのQDBusPendingReply インスタンスに代入し、現在の保留中の呼び出しへの参照を破棄します。現在の参照が未完了の保留中の呼び出しに対するものであり、これが最後の参照である場合、その保留中の呼び出しはキャンセルされ、返信が届いたとしてもその内容を取得する方法がなくなります。
この関数は Qt 6.10 で導入されました。
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusMessage &message)
このオブジェクトがmessage メッセージから内容を取得するようにし、現在の保留中の呼び出しへの参照を解除します。現在の参照が未完了の保留中の呼び出しに対するものであり、かつこれが最後の参照である場合、その保留中の呼び出しはキャンセルされ、返信の内容が到着してもそれを取得する手段はなくなります。
この関数の実行が完了すると、QDBusPendingReply オブジェクトは「完了」状態となり、message の内容にアクセスできるようになります。
isFinished()も参照してください 。
QDBusPendingReply<Types...> &QDBusPendingReply::operator=(const QDBusPendingCall &call)
このオブジェクトが、call の保留中の呼び出しからその内容を取得するようにし、現在の保留中の呼び出しへの参照を破棄します。現在の参照が未完了の保留中の呼び出しに対するものであり、かつこれが最後の参照である場合、その保留中の呼び出しはキャンセルされ、返信が届いたとしてもその内容を取得する方法がなくなります。
[implicit] int &QDBusPendingReply::operator=(const QDBusPendingReply<Types...> &other)
other のコピーを作成し、現在の保留中の呼び出しへの参照を解除します。現在の参照が未完了の保留中の呼び出しに対するものであり、かつこれが最後の参照である場合、その保留中の呼び出しはキャンセルされ、返信が届いたとしてもその内容を取得する方法がなくなります。
© 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.