为什么 QDBus 抱怨类型错误?

Why does QDBus complains about wrong type?

以下代码片段有什么问题? 我不断收到错误消息

Unexpected reply signature: got "a{sa{sv}}", expected "" (QMap<QString,QVariantMap>)

QDBusInterface connIface(
                    NM_DBUS_SERVICE,
                    "/org/freedesktop/NetworkManager/Settings/1",
                    NM_DBUS_INTERFACE_SETTINGS_CONNECTION,
                    QDBusConnection::systemBus());

QDBusReply<QMap<QString, QMap<QString, QVariant>> > settingsResult = connIface.call("GetSettings");

我真的不明白,对我来说似乎完全没问题。这可能与编译器/header-versions 有某种关系吗?

您必须先注册预期的响应!

在我的情况下就像

#include <QtDBus/QDBusMetaType>
// ...
typedef QMap<QString, QMap<QString, QVariant> > ConnectionDetails;
Q_DECLARE_METATYPE(ConnectionDetails)

int main() {
    qDBusRegisterMetaType<ConnectionDetails>();
    // ...
}