QLocale и QSettings

Предпосылка: я использую qt5.7 на osx. Я изменил десятичный разделитель в System PreferencesLanguage and RegionAdvanced использовать запятую:

введите описание изображения здесь

У меня проблема с сохранением / восстановлением 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 это не работает

1

Решение

Кажется, это ошибка. Я только что протестировал ваш код, используя 5.6 и macOS Sierra (10.12.3), и он работает правильно, даже без взлома, но при тестировании на Qt 5.8 он перестал работать. Но если вы измените инициализацию QSettings сохранить настройки в файл, все работает!

// QSettings my_set("test","");
QSettings my_set("test.ini", QSettings::IniFormat);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]