QLocale и QSettings
Предпосылка: я использую 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://stackru.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 не восстанавливает его.
Также при попытке взлома, описанного здесь: /questions/7565915/silovaya-tochka-a-ne-zapyataya-dlya-plavayuschej-tochki-v-qt/7565933#7565933 он не работает.
1 ответ
Кажется, это ошибка. Я только что протестировал ваш код, используя 5.6 и macOS Sierra (10.12.3), и он работает правильно, даже без взлома, но при тестировании на Qt 5.8 он перестал работать. Но если вы измените инициализацию QSettings
сохранить настройки в файл, все работает!
// QSettings my_set("test","");
QSettings my_set("test.ini", QSettings::IniFormat);