QDBusAbstractInterface Class
QDBusAbstractInterface クラスは、Qt D-Bus バインディングのすべての D-Bus インターフェイスの基本クラスで、リモート・インターフェイスにアクセスできます。詳細...
ヘッダー | #include <QDBusAbstractInterface> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS DBus) target_link_libraries(mytarget PRIVATE Qt6::DBus) |
qmake: | QT += dbus |
を継承する: | QObject |
によって継承される: |
パブリック関数
virtual | ~QDBusAbstractInterface() |
QDBusPendingCall | asyncCall(const QString &method, Args &&... args) |
QDBusPendingCall | asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args) |
QDBusMessage | call(const QString &method, Args &&... args) |
QDBusMessage | call(QDBus::CallMode mode, const QString &method, Args &&... args) |
QDBusMessage | callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args) |
bool | callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod) |
bool | callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot) |
QDBusConnection | connection() const |
QString | interface() const |
(since 6.7) bool | isInteractiveAuthorizationAllowed() const |
bool | isValid() const |
QDBusError | lastError() const |
QString | path() const |
QString | service() const |
(since 6.7) void | setInteractiveAuthorizationAllowed(bool enable) |
void | setTimeout(int timeout) |
int | timeout() const |
詳細説明
生成コード・クラスも QDBusAbstractInterface から派生し、ここで説明するすべてのメソッドは生成コード・クラスでも有効です。ここで説明するものに加えて、生成コード・クラスはリモート・メソッド用のメンバ関数を提供し、正しいパラメータと戻り値のコンパイル時チェック、およびプロパティ型マッチングとシグナル・パラメータ・マッチングを可能にします。
QDBusコンパイラと QDBusInterfaceも参照してください 。
メンバ関数のドキュメント
[virtual noexcept]
QDBusAbstractInterface::~QDBusAbstractInterface()
このオブジェクトのリソースを解放する。
template <typename... Args> QDBusPendingCall QDBusAbstractInterface::asyncCall(const QString &method, Args &&... args)
このインターフェイスのメソッドmethod を呼び出し、args をメソッドに渡す。すべてのargs はQVariant に変換可能でなければならない。
call
へのパラメータは、入力引数として D-Bus 経由でリモート関数に渡される。返されたQDBusPendingCall オブジェクトは、返答に関する情報を調べるために使用することができる。
次のように使用できます:
QDBusPendingCall pcall = interface->asyncCall("GetAPIVersion"_L1); auto watcher = new QDBusPendingCallWatcher(pcall, this); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [&](QDBusPendingCallWatcher *w) { QString value = retrieveValue(); QDBusPendingReply<int> reply(*w); QDBusPendingCall pcall; if (reply.argumentAt<0>() >= 14) pcall = interface->asyncCall("ProcessWorkUnicode"_L1, value); else pcall = interface->asyncCall("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8()); w = new QDBusPendingCallWatcher(pcall); QObject::connect(w, &QDBusPendingCallWatcher::finished, this, &Abstract_DBus_Interface::callFinishedSlot); });
この例では、0、1、2個のパラメータを持つ関数の呼び出しと、それぞれに渡されるパラメータ・タイプの違いを示しています("ProcessWorkUnicode"
への最初の呼び出しには1つのUnicode文字列が含まれ、"ProcessWork"
への2番目の呼び出しには1つの文字列と1つのバイト配列が含まれます)。ブロッキング(同期)呼び出しでの同じ例はcall() を参照してください。
注意: Qt 5.14以前では、この関数は最大8つの引数しか受け付けませんでした。
注: ローカルQDBusServer
'へのメソッド呼び出しは、実装上の制限により、決して非同期ではありません。
asyncCallWithArgumentList()も参照してください 。
QDBusPendingCall QDBusAbstractInterface::asyncCallWithArgumentList(const QString &method, const QList<QVariant> &args)
args を引数として、method で指定されたリモートメソッドの呼び出しをこのインターフェイスに配置する。この関数は、応答のステータスを追跡し、応答が到着したらその内容にアクセスするために使用できるQDBusPendingCall オブジェクトを返します。
通常、呼び出しはasyncCall() を使って行う。
注: アプリケーション自身が登録したオブジェクトに対するメソッド呼び出しは、実装上の制限により、決して非同期ではありません。
注:この関数はスレッドセーフです。
template <typename... Args> QDBusMessage QDBusAbstractInterface::call(const QString &method, Args &&... args)
このインターフェイスのメソッドmethod を呼び出し、args をメソッドに渡す。すべてのargs はQVariant に変換可能でなければならない。
call
へのパラメータは、入力引数として D-Bus 経由でリモート関数に渡される。出力引数はQDBusMessage リプライで返される。リプライがエラー・リプライの場合、lastError ()にもエラー・メッセージの内容が設定される。
次のような使い方ができる:
QString value = retrieveValue(); QDBusMessage reply; QDBusReply<int> api = interface->call("GetAPIVersion"_L1); if (api >= 14) reply = interface->call("ProcessWorkUnicode"_L1, value); else reply = interface->call("ProcessWork"_L1, "UTF-8"_L1, value.toUtf8());
この例では、0個、1個、2個のパラメータを持つ関数の呼び出しと、それぞれに渡される異なるパラメータ・タイプを示しています("ProcessWorkUnicode"
への最初の呼び出しには1個のUnicode文字列が含まれ、"ProcessWork"
への2番目の呼び出しには1個の文字列と1個のバイト配列が含まれます)。ノンブロッキング(非同期)呼び出しでの同じ例はasyncCall() を参照してください。
注意: Qt 5.14以前では、この関数は最大8つの引数しか受け付けませんでした。
callWithArgumentList()も参照してください 。
template <typename... Args> QDBusMessage QDBusAbstractInterface::call(QDBus::CallMode mode, const QString &method, Args &&... args)
これはオーバーロードされた関数である。
このインターフェイスのメソッドmethod を呼び出し、args をメソッドに渡す。すべてのargs はQVariant に変換可能でなければならない。
mode がNoWaitForReply
の場合、この関数はリモートメソッドからの応答を待たずに、呼び出し後すぐに戻ります。そうでない場合、mode は、この関数が応答の到着を待つ間、Qt イベントループをアクティブにするかどうかを示します。
この関数が応答を待つためにQtイベントループに再び入る場合、ユーザー入力は除外されます。待ち時間の間、シグナルや他のメソッド呼び出しがアプリケーションに送られるかもしれません。そのため、call()で呼び出されるたびに、再入力に対応できるようにしておく必要があります。
注意: Qt 5.14以前では、この関数は最大8つの引数しか受け付けませんでした。
callWithArgumentList()も参照してください 。
QDBusMessage QDBusAbstractInterface::callWithArgumentList(QDBus::CallMode mode, const QString &method, const QList<QVariant> &args)
args を引数として、method で指定されたリモートメソッドの呼び出しをこのインターフェイスに配置する。この関数は、応答として受信したメッセージを返す。このメッセージは、通常のQDBusMessage::ReplyMessage (成功を示す)またはQDBusMessage::ErrorMessage (呼び出しが失敗した場合)である。mode パラメータは、この呼の配置方法を指定する。
呼び出しが成功した場合、lastError ()はクリアされる。そうでない場合、この呼び出しが生成したエラーが格納される。
通常は、call ()を使用して呼び出しを行う。
警告: UseEventLoop
この関数が返される前に、他のメソッド呼び出しやシグナルが送られるかもしれませんし、他の Qt キューのシグナルやイベントが送られるかもしれません。
注意:この関数はスレッドセーフです。
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *returnMethod, const char *errorMethod)
args を引数として、method で指定されたリモートメソッドの呼び出しをこのインターフェイスに配置する。この関数は、呼び出しをキューに入れた直後に戻る。リモート関数からの返事は、オブジェクトreceiver 上のreturnMethod に送られる。エラーが発生した場合、代わりにオブジェクトreceiver 上のerrorMethod が呼び出される。
この関数は、キューイングが成功した場合、true
を返す。これは、実行された呼び出しが成功したことを示すものではない。失敗した場合、errorMethod が呼び出される。キューイングに失敗した場合、この関数はfalse
を返し、スロットは呼び出されない。
returnMethod は、関数呼び出しによって返された型をパラメータとして持たなければならない。オプションとして、最後のパラメータまたは唯一のパラメータとしてQDBusMessage を持つことができる。errorMethod は、唯一のパラメータとしてQDBusError を持たなければならない。
注: アプリケーション自身が登録したオブジェクトに対するメソッド呼び出しは、実装上の制限により、決して非同期にはならない。
QDBusError およびQDBusMessageも参照のこと 。
bool QDBusAbstractInterface::callWithCallback(const QString &method, const QList<QVariant> &args, QObject *receiver, const char *slot)
これはオーバーロードされた関数です。
この関数は非推奨です。オーバーロード版を使用してください。
args を引数として、method で指定されたリモートメソッドの呼び出しをこのインターフェイスに配置します。この関数は、呼び出しをキューに入れた直後に戻ります。リモート関数からの返答や、その関数が発したエラーは、オブジェクトreceiver のslot スロットに配送されます。
この関数は、キューイングが成功した場合、true
を返す。これは、呼び出しが成功したことを示すものではない。失敗した場合、エラーメッセージとともにスロットが呼び出される。lastErrorそのような状況では、()は設定されません。
QDBusError およびQDBusMessageも参照のこと 。
QDBusConnection QDBusAbstractInterface::connection() const
このインターフェースが関連付けられている接続を返します。
QString QDBusAbstractInterface::interface() const
このインターフェースの名前を返します。
[since 6.7]
bool QDBusAbstractInterface::isInteractiveAuthorizationAllowed() const
非同期呼び出しの場合、呼び出し元が対話的認可を待つ用意があるかどうかを返す。
デフォルトはfalse
です。
この関数は Qt 6.7 で導入されました。
setInteractiveAuthorizationAllowed() およびQDBusMessage::setInteractiveAuthorizationAllowed()も参照してください 。
bool QDBusAbstractInterface::isValid() const
これがリモート・オブジェクトへの有効な参照である場合、true
を返す。このインタフェースの作成時にエラーが発生した場合(例えば、リモート・アプリケーションが存在しない場合)には、false
を返します。
注意:リモート・オブジェクトを扱う場合、QDBusInterface を作成する際に、そのオブジェクトが存在するかどうかを判断できるとは限りません。
QDBusError QDBusAbstractInterface::lastError() const
最後の操作がエラーを発生させた場合はそのエラーを返し、 最後の操作がエラーを発生させなかった場合は無効なエラーを返します。
QString QDBusAbstractInterface::path() const
このインターフェースが関連付けられているオブジェクトのパスを返します。
QString QDBusAbstractInterface::service() const
このインターフェースが関連付けられているサービスの名前を返します。
[since 6.7]
void QDBusAbstractInterface::setInteractiveAuthorizationAllowed(bool enable)
非同期呼の場合、発呼側が対話的認可を待つ用意があるかどうかを設定する。
enable がtrue
に設定されている場合、このインターフェイスを介した非同期呼び出しのために生成される D-Busメッセージは、ALLOW_INTERACTIVE_AUTHORIZATION
フラグを設定する。
このフラグは、非特権コードがより特権の高いメソッド呼び出しを呼び出すとき にのみ有効であり、対話的な認可を可能にする認可フレームワークが配置されている。
デフォルトはfalse
です。
この関数は Qt 6.7 で導入されました。
isInteractiveAuthorizationAllowed() およびQDBusMessage::setInteractiveAuthorizationAllowed()も参照してください 。
void QDBusAbstractInterface::setTimeout(int timeout)
今後のすべての DBus 呼び出しのタイムアウトをミリ秒単位でtimeout に設定します。 -1 はデフォルトの DBus タイムアウト(通常は 25 秒)を意味します。
timeout()も参照 。
int QDBusAbstractInterface::timeout() const
タイムアウトの現在値をミリ秒単位で返します。-1 はデフォルトの DBus タイムアウト (通常は 25 秒) を意味します。
setTimeout()も参照 。
© 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.