代码之家  ›  专栏  ›  技术社区  ›  ΦXocę 웃 Пepeúpa ツ

为什么qtsettings以一种奇怪的模式存储浮动,丢失了什么?

qt
  •  0
  • ΦXocę 웃 Пepeúpa ツ  · 技术社区  · 7 年前

    [图表]权重=3.154

    [ui]颜色=#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();
    

    用于linux的QT647.5位

    1 回复  |  直到 7 年前
        1
  •  2
  •   Felix    7 年前

    你并不是真的错过了什么。你只看到Qt如何编码INI文件。由于没有描述在INI文件中如何表示某些类型的标准,Qt定义了它们自己的类型。看到了吗 https://doc.qt.io/qt-5/qsettings.html#Format-enum @<typename>(<data>) QVariant ,您看到的数据是 @Variant(<metaTypeId><data>) \0\0\0\x8 编码为32位十六进制字符串。所有的数据都是二进制的 QDataStream::operator<< 会产生的。但是,为了使INI文件至少在某种程度上可读并与其他应用程序编写的文件兼容,一些类型(如 QString , int , double bool ,…)使用另一种更为常见的表示法。

    对于这个具体的例子,他们决定不为 float 类型。确切的原因我不知道,但我个人的猜测是,他们希望能够区分INI文件中的双精度和浮点数的区别,这样就不会有人意外地将浮点解释为double(因此假设给定的数字具有双重精度,即使它没有)。