Вы действительно ничего не упускаете. Все, что вы видите, это то, как Qt кодирует INI-файлы. Поскольку не существует стандарта, описывающего, как определенные типы должны быть представлены в INI-файле, Qt определил их собственные. См. https://doc.qt.io/qt-5/qsettings.html#Format-enum для более подробной информации. Короче говоря, любой «специальный» тип представлен @<typename>(<data>)
, причем большинство из них далее кодируется как QVariant
, для которого вы видите данные @Variant(<metaTypeId><data>)
. Идентификатор метатипа для числа с плавающей запятой равен 8 или \0\0\0\x8
, закодированный как 32-разрядная шестнадцатеричная строка. Все, что находится после этих 4 символов, - это действительные двоичные данные, поскольку QDataStream::operator<<
будет производить их. Однако, чтобы сделать INI-файлы, по крайней мере, несколько читаемыми и совместимыми с файлами, написанными другими приложениями, некоторые типы (такие как QString
, int
, double
, bool
, ...) используют другой, чаще известное представление.
Для этого конкретного случая они решили не программировать такое исключение кодирования для типа float
. Точная причина мне неизвестна, но мое личное предположение состояло бы в том, что они хотели, чтобы в INI-файлах была возможность определить разницу между значениями типа double и float, чтобы кто-то случайно не интерпретировал float как double (и, таким образом, предположил, что данное число имеет двойную точность, хотя и не имеет).