【发布时间】:2018-10-12 10:57:04
【问题描述】:
为什么是possible in Qt 5.2 和previously 并以以下格式存储数据:
key=@Variant(\0\0\0\b\0\0\0)
但是现在 Qt 5.11 有问题?!以下代码
QVariantMap projectsMap;
for (auto project : projects)
projectsMap.insert(key, value);
settings->setValue("Group/projects", projectsMap);
可以正确执行,但不会将任何内容存储到 ini 文件中。
qRegisterMetaTypeStreamOperators<QVariantMap>("QVariantMap");
也无济于事。这个怎么存储,这里有什么问题?
【问题讨论】:
-
无法重现(Linux + Qt5.11.2)。
projectsMap肯定不是空的吗?QVariant实例中包含的类型是否都向Qt元类型系统注册? -
@G.M.,是的,不是空的:用
qDebug()检查这个包含键和值的QString。问题是即使"projects"密钥也没有在 ini 文件中的"Group"中创建。 -
@G.M.,问题出在
settings->sync():上面设置在析构函数中执行的存储操作,我认为设置析构函数应该自动调用sync()- 似乎不是这样,所以明确调用sync()现在 - 工作正常!谢谢! -
在提供完整的测试用例之前,这个问题是有缺陷的。您在哪个“析构函数”中设置了设置?析构函数在这里并不特殊,
QSettings也不在乎。 -
@KubaOber,在我的类设置中声明为
QPointer<QSettings> settings;并且似乎在销毁对象settings->sync()时没有被调用。明确地调用它。
标签: qt qt5 qmap qvariant qsettings