am尝试创建如下设置文件:
[图]重量= 3.154
[ui] color =#00FFC1
但是得到类似的东西
[图]重量= @ Variant(\ 0 \ 0 \ 0 \ x87 @] / \ x1b)
[ui] color =#00FFC1
我的代码很简单,看起来像
QSettings settings("foo.ini", QSettings::IniFormat);
settings.beginGroup("graph");
settings.setValue("weight", 3.456f);
settings.endGroup();
settings.beginGroup("ui");
settings.setValue("color", "#00FFC1");
settings.endGroup();
settings.sync();
qt5.7.1(适用于Linux 64位)
答案 0 :(得分:0)
您并没有真正错过任何东西。您所看到的就是Qt如何编码INI文件。由于没有标准描述在INI文件中应如何表示某些类型,因此Qt定义了它们自己的类型。有关更多详细信息,请参见https://doc.qt.io/qt-5/qsettings.html#Format-enum。简而言之,任何“特殊”类型都由@<typename>(<data>)
表示,其中大多数都被进一步编码为QVariant
,为此,您看到的数据为@Variant(<metaTypeId><data>)
。 float的元类型id为8,或\0\0\0\x8
编码为32位十六进制字符串。这四个字符之后的所有内容都是实际的二进制数据,就像QDataStream::operator<<
会生成它一样。但是,为了使INI文件在某种程度上可读性强并且与其他应用程序编写的文件兼容,请使用某些类型(如QString
,int
,double
,bool
,.. 。)使用其他更常见的表示形式。
对于这种具体情况,他们决定不为float
类型编写这样的编码异常。确切的原因对我来说是未知的,但我个人的猜测是,他们希望能够区分INI文件中的double和float之间的区别,因此,有人不会不小心将float解释为double(因此假设给定的数字即使没有,也具有双精度。