从 Qt 中的 QDBusMessage 检索数据

Posted

技术标签:

【中文标题】从 Qt 中的 QDBusMessage 检索数据【英文标题】:Retrieve data from QDBusMessage in Qt 【发布时间】:2021-03-02 14:10:59 【问题描述】:

我正在开发一个必须实现 WiFi 连接机制的应用程序(它将是一个全屏触摸屏应用程序)。为此,我使用 DBus 与网络管理器进行通信。我成功地让它扫描访问点并将它们列在 QTableView 中。接下来将连接到所选的 wifi 网络。尝试连接时我要做的第一件事是检查系统中是否已经存在与该接入点的现有连接,所以我这样做:

settings = new QDBusInterface("org.freedesktop.NetworkManager", "/org/freedesktop/NetworkManager/Settings", "org.freedesktop.NetworkManager.Settings", dbusConnection, this);
QDBusMessage msg = settings->call("ListConnections");
QDBusArgument arg = msg.arguments().at(0).value<QDBusArgument>();
QList<QDBusObjectPath> pathsList = qdbus_cast<QList<QDBusObjectPath>>(arg);
foreach (QDBusObjectPath p, pathsList) 
    QDBusInterface *conn = new QDBusInterface("org.freedesktop.NetworkManager", p.path(), "org.freedesktop.NetworkManager.Settings.Connection", dbusConnection);
    QDBusMessage msg = conn->call("GetSettings");
    qDebug() << "Reply: " << msg;

我收到消息并且可以使用 qDebug() 读取它。该消息采用 d-bus 格式:asasv 正如网络管理器的文档所述。而且我无法将其解析为任何可用的形式。据我了解,我应该将数据放入的等效 Qt 类是:

QList<QMap<QString, QMap<QString, QVariant>>>

我认为我应该用 QDBusArgument 类来做,但不知道应该怎么做。谁能告诉我最好的方法是什么?

谢谢。

【问题讨论】:

【参考方案1】:

我设法解决了我的问题,结果证明这很容易。我创建了地图对象并使用了 >> 运算符:

QDBusArgument arg = args.at(0).value<QDBusArgument>();
QMap<QString, QMap<QString, QVariant>> map;
arg >> map;

【讨论】:

以上是关于从 Qt 中的 QDBusMessage 检索数据的主要内容,如果未能解决你的问题,请参考以下文章

QT 模型/视图编程:我应该如何检索上下文菜单选项的额外数据?

当 QNetworkAccessManager 完成时,Qt 检索在请求期间创建的附加数据

Qt 5.5 和 OpenGL:检索设备信息

QT:从网页获取文本内容

所有从 php 中的 ms access 数据库中检索数据

Qt 之图形(渐变填充)