QDBusAbstractInterface Class

QDBusAbstractInterface クラスは、Qt D-Bus バインディングのすべての D-Bus インターフェースの基底クラスで、リモート・インターフェースへのアクセスを可能にします。詳細...

Header: #include <QDBusAbstractInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus
Inherits: QObject
Inherited By:

QDBusConnectionInterface and QDBusInterface

パブリック関数

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 をメソッドに渡します。すべてのargsQVariant に変換可能でなければならない。

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 をメソッドに渡します。すべてのargsQVariant に変換可能でなければならない。

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 をメソッドに渡します。すべてのargsQVariant に変換可能でなければならない。

modeNoWaitForReply の場合、この関数は、リモート・メソッドからの応答を待たずに、呼び出し後すぐに戻る。そうでない場合、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 で指定されたリモートメソッドの呼び出しをこのインターフェイスに配置します。この関数は、呼び出しをキューに入れた直後に戻ります。リモート関数からの返答や、その関数が発したエラーは、オブジェクトreceiverslot スロットに配送されます。

この関数は、キューイングが成功した場合、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)

非同期呼び出しの場合、呼び出し元が対話的認可を待つ用意があるかどうかを設定する。

enabletrue に設定されている場合、このインターフェイスを介した非同期呼の ために生成される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() も参照して ください。

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