我正计划开发一个使用 DBus 和 connman(嵌入式设备的无线管理器)的应用程序。据我了解,DBus 公开了程序使用的方法,并允许开发人员在自己的程序中也使用这些方法。
我知道Qt有QtDbus模块,如果我的理解是正确的,net.connman.Manager接口下的GetServices方法显示了可用的无线网络。从 qdbusviewer 程序检查 GetServices 方法的输出,我可以看到每个无线网络都有自己独特的对象路径,例如/net/connman/service/wifi_00120ec15ba0_4c616964614d616774616c6173_managed_psk。
要在 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 和编程的新手,所以任何帮助将不胜感激。
谢谢