为什么我不能在 QSettings 中存储 QVariantMap?

Why I can't store QVariantMap in QSettings?

为什么它是 possible in Qt 5.2 and previously 并以下列格式存储数据:

key=@Variant([=10=][=10=][=10=]\b[=10=][=10=][=10=])

但是 Qt 5.11 现在有问题吗?!以下代码

QVariantMap projectsMap;
for (auto project : projects)
    projectsMap.insert(key, value);

settings->setValue("Group/projects", projectsMap);

正确执行,但不向 ini 文件存储任何内容。

qRegisterMetaTypeStreamOperators<QVariantMap>("QVariantMap");

也无济于事。这个怎么存储,这里有什么问题?

不要存储 QSettings:不应该那样使用。每次更改设置时都应该使用 QSettings 的新实例。您的析构函数应如下所示:

MyClass::~MyClass() {
  QSettings s;
  s.setValue(kFoo, this->m_bar);
  …
}

QSettings 是设置系统的临时句柄,它的实例化很便宜。你泄漏它是因为 QPointer 不会破坏任何东西:它不是一个拥有指针。