2

DBus と、組み込みデバイス用のワイヤレス マネージャーである connman を利用するアプリケーションを開発する予定です。私の理解では、DBus はプログラムで使用されるメソッドを公開し、開発者がこれらのメソッドを独自のプログラムで使用できるようにします。

Qt に QtDbus モジュールがあることは知っています。私の理解が正しければ、net.connman.Manager インターフェイスの下の GetServices メソッドは、利用可能なワイヤレス ネットワークを示します。qdbusviewer プログラムからの GetServices メソッドの出力を調べると、各ワイヤレス ネットワークに固有のオブジェクト パスがあることがわかります。

net.connman.Services インターフェイスで Connect および Disconnect メソッドを使用するには、Connect/Disconnect を呼び出すことができる新しいインターフェイスを作成できるように、オブジェクト パスが必要です。Qt DBus呼び出しで QDBusMessage から返されたデータを抽出するにはどうすればよいですか? 、しかし、オブジェクトパスを返そうとすると空白になるだけです:

オブジェクトパスを取得するための私のコードは次のとおりです。

QDBusConnection bus = QDBusConnection::systemBus();
QDBusInterface *interface = new QDBusInterface("net.connman",
                                               "/",
                                               "net.connman.Manager",
                                               bus,                                              
                                               this);

QDBusMessage test = interface->call("GetServices");
QList<QVariant> outArgs = test.arguments();

QVariant first = outArgs.at(0);
qDebug() << first;

QDBusVariant dbvFirst = first.value<QDBusVariant>();

QVariant vFirst = dbvFirst.variant();
qDebug() << vFirst;

QDBusArgument dbusArgs = vFirst.value<QDBusArgument>();
qDebug() << "QDBusArgument current type is" << dbusArgs.currentType();

QDBusObjectPath path;
dbusArgs.beginArray();
while (!dbusArgs.atEnd())
{
     dbusArgs >> path;
}

dbusArgs.endArray();
qDebug() << path.path();

GetService メソッドによって返される引数とオブジェクト パスを抽出するにはどうすればよいですか? 誰かがこれを正しく行いましたか? 私はQtとプログラミングが初めてなので、助けていただければ幸いです。

ありがとう

4

1 に答える 1

1

これは遅いかもしれませんが、これが他の人に役立つことを願っています. 呼び出しの戻り値の型 (dbus では a(oa{sv})) についてはわかりませんが、QArrayOfPathProperties を使用してみました。したがって、コードを使用すると、 test.arguments() から返される型は次のようになります。

QArrayOfPathProperties outArg;

抽出は次のようになります。

for (int row = 0; row < outArg.size(); ++row) {
     QMap<QString,QVariant> map = outArg.at(row).properties;
     // for example you can extract the value like this:
     auto serviceName = map.value("Name");     
}
于 2017-07-13T07:19:19.290 に答える