2016-10-20 23 views
1

前提:私はSystem Preferencesに小数点区切り文字を変更したqt5.7使用してOSX上だ - コンマを使用するAdvancedからLanguage and Region:私は問題を抱えているQLocaleとQSettings

enter image description here

をを使用して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は私が小数点区切りとしてカンマを使用することを認識しているように見えますが、これQLocaleQSettingsに保存されていると読み戻されたとき、Qtはそれを回復しません。

また、ここで説明したハッキン​​グを試してみると、https://stackoverflow.com/a/11603299/2743307は動作しません。

答えて

0

これはバグのようです。私はちょうどあなたが5.6とMacOS Sierra(10.12.3)を使ってコードをテストしたところ、ハックがなくても正しく動作しますが、Qt 5.8でテストすると動作しなくなりました。しかし、QSettingsの初期化を変更して設定をファイルに保存すると、それは機能します!

// QSettings my_set("test",""); 
QSettings my_set("test.ini", QSettings::IniFormat); 
関連する問題