2016-10-20 14 views
1

전제 : 쉼표를 사용하는 Advanced - - Language and Region 내가 qt5.7를 사용하여 OSX에있어 본인은 System Preferences에서 소수 구분을 변경했습니다 QSettings을 통해 QLocale 값을 저장/복원합니다.QLocale 및 QSettings

#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입니다 :

main.cpp입니다

TEMPLATE = app 
QT += core 
TARGET = test 
INCLUDEPATH += . 
SOURCES += main.cpp 

출력은 다음과 같습니다

"영어", "라틴어" "미국 에선" ' '-'OK 시스템 '

"영어" "라틴어" "UnitedStates" '.' - "QSettings OK"

"영어" "라틴어" "UnitedStates" '. - "헝가리어 STILL OK NOT"

가와는 QLocale처럼 보이는 내가 소수 구분 기호로 쉼표를 사용하지만이 QLocaleQSettings에 저장하고 다시 읽을 때, Qt는 그것을 복구하지 않는 것을 알고있다.

여기에 설명 된 해킹을 시도 할 때 : https://stackoverflow.com/a/11603299/2743307도 작동하지 않습니다.

답변

0

버그 인 것 같습니다. 난 그냥 5.6 및 MacOS 시에라 (10.12.3)를 사용하여 코드를 테스트하고 해킹 없이도 제대로 작동하지만 Qt 5.8에서 테스트 할 때 작동이 멈췄다. 그러나 설정을 파일로 저장하기 위해 QSettings의 초기화를 변경하면 작동합니다!

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