【问题标题】:Retrieve data from QDBusMessage in Qt从 Qt 中的 QDBusMessage 检索数据
【发布时间】: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 格式:a{sa{sv}} 正如网络管理器的文档所述。而且我无法将其解析为任何可用的形式。据我了解,我应该将数据放入的等效 Qt 类是:

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

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

谢谢。

【问题讨论】:

    标签: qt dbus networkmanager


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-12-10
      • 1970-01-01
      • 2020-11-08
      • 1970-01-01
      • 2013-08-06
      • 2019-11-19
      相关资源
      最近更新 更多