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);
Другие вопросы по тегам