Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么QT设置以奇怪的模式存储浮动,我缺少什么?_Qt - Fatal编程技术网

为什么QT设置以奇怪的模式存储浮动,我缺少什么?

为什么QT设置以奇怪的模式存储浮动,我缺少什么?,qt,Qt,我正在尝试创建如下设置文件: [图表]权重=3.154 [ui]颜色=#00FFC1 但我得到的是 [图形]权重=@变量(\0\0\0\x87@]/\x1b) [ui]颜色=#00FFC1 我的代码很简单,看起来像 QSettings settings("foo.ini", QSettings::IniFormat); settings.beginGroup("graph"); settings.setValue("weight", 3.456f); settings.endGroup(); s

我正在尝试创建如下设置文件:

[图表]权重=3.154

[ui]颜色=#00FFC1

但我得到的是

[图形]权重=@变量(\0\0\0\x87@]/\x1b)

[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();

qt5.7.1对于linux 64位

您并没有真正遗漏任何内容。您所看到的只是Qt如何对INI文件进行编码。由于没有标准描述在INI文件中如何表示某些类型,Qt定义了它们自己的类型。有关更多详细信息,请参阅。简言之,任何“特殊”类型都由
@()
表示,其中大多数进一步编码为
QVariant
,您看到的数据是
@Variant()
。浮点的元类型id为8,或编码为32位十六进制字符串的
\0\0\0\x8
。这4个字符后面的所有内容都是实际的二进制数据,正如
QDataStream::operator因为我看到了3.154和3.456f,他有一个输入错误。关于这个问题,我想你知道,当3.456f被放置时,只是浮点数的一个不准确的表示(IEEE-754),为了在检索时不丢失信息,位被保存,它们不会保存为消除精度的字符串,如果你想保存为可见的小数,那么就将其转换为QString