前提:私はSystem Preferences
に小数点区切り文字を変更したqt5.7使用してOSX上だ - コンマを使用するAdvanced
からLanguage and Region
:私は問題を抱えているQLocaleとQSettings
をを使用してQLocale
の値を保存/復元します。
これは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の"」、 ' - 'システムOK '
"英語" "ラテン語" "UnitedStates" '' - "QSettings NOT OK"
"英語" "ラテン語" "UnitedStates" '。 - 「ハンガリー語STILL OK NOT」
とQLocale
は私が小数点区切りとしてカンマを使用することを認識しているように見えますが、これQLocale
がQSettings
に保存されていると読み戻されたとき、Qtはそれを回復しません。
また、ここで説明したハッキングを試してみると、https://stackoverflow.com/a/11603299/2743307は動作しません。