我正在尝试创建一个设置文件,如:
图weight=3.154 ui color=#00FFC1
但我得到的是
图weight=@Variant(\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位
发布于 2019-03-07 13:32:25
你并没有错过任何东西。你看到的只是Qt是如何编码INI的。由于没有标准描述某些类型应该如何在INI中表示,所以Qt定义了它们自己的类型。有关更多详细信息,请参阅https://doc.qt.io/qt-5/qsettings.html#Format-enum。简而言之,任何“特殊”类型都是由@<typename>(<data>)表示的,其中大多数被进一步编码为QVariant,您看到的数据就是@Variant(<metaTypeId><data>)。浮点数的元类型id是8,或者\0\0\0\x8编码为32位十六进制字符串.这4个字符之后的所有内容都是实际的二进制数据,就像QDataStream::operator<<会生成的那样。但是,为了使INI-文件至少与其他应用程序编写的文件具有一定的可读性和兼容性,某些类型(如QString、int、double、bool、.)使用另一种更常见的表示形式。
对于这个具体的情况,他们决定不为float类型编写这样的编码异常。我不知道确切的原因,但我个人的猜测是,他们想要区分INI-Files中的双倍和浮点数之间的区别,这样就不会有人意外地将浮点数解释为双倍(因此假设给定的数字具有双精度,尽管它没有)。
https://stackoverflow.com/questions/55044655
复制相似问题