Предпосылка: я использую qt5.7 на osx. Я изменил десятичный разделитель в System Preferences
— Language and Region
— Advanced
использовать запятую:
У меня проблема с сохранением / восстановлением QLocale
значение через QSettings
,
Это main.cpp
:
#include <QSettings>
#include <QDebug>
void printLocale(QString header, QLocale locale) {
qDebug() <<
QLocale::languageToString(locale.language()) <<
QLocale::scriptToString(locale.script()) <<
QLocale::countryToString(locale.country()) <<
locale.decimalPoint() << "-" << header;
}int main( int argc, char **argv )
{
QLocale my_loc=QLocale::system();
printLocale("System OK", my_loc);
QSettings my_set("test","");
my_set.setValue("locale",my_loc);
QLocale my_set_loc=my_set.value("locale").toLocale();
printLocale("QSettings NOT OK",my_set_loc);
// hack from https://stackoverflow.com/a/11603299/2743307
QLocale hungary(QLocale::Hungarian);
my_set_loc.setNumberOptions(hungary.numberOptions());
printLocale("Hungarian STILL NOT OK",my_set_loc);
return 0;
}
а это мой .pro
:
TEMPLATE = app
QT += core
TARGET = test
INCLUDEPATH += .
SOURCES += main.cpp
Выход:
«Английский» «Латинский» «UnitedStates» ‘,’ — «Система в норме»
«Английский» «латинский» «UnitedStates» ‘.’ — «QSettings НЕ ОК»
«Английский» «латинский» «UnitedStates» ‘.’ — «Венгерский все еще не в порядке»
и похоже, что QLocale
знает, что я использую запятую в качестве десятичного разделителя, но когда это QLocale
хранится в QSettings
и прочитайте обратно, Qt не восстанавливает его.
Также при попытке взлома описано здесь: https://stackoverflow.com/a/11603299/2743307 это не работает
Кажется, это ошибка. Я только что протестировал ваш код, используя 5.6 и macOS Sierra (10.12.3), и он работает правильно, даже без взлома, но при тестировании на Qt 5.8 он перестал работать. Но если вы измените инициализацию QSettings
сохранить настройки в файл, все работает!
// QSettings my_set("test","");
QSettings my_set("test.ini", QSettings::IniFormat);
Других решений пока нет …