2016-10-20 4 views
1

Premise: Ich auf osx bin mit qt5.7 Ich habe das Dezimaltrennzeichen in der System Preferences geändert - Language and Region-Advanced das Komma zu verwenden:QLocale und QSettings

enter image description here

Ich habe ein Problem in Speichern/Wiederherstellen des Werts QLocale über QSettings.

Dies ist 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; 
} 

und das ist mein .pro:

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

Die Ausgabe lautet:

"Englisch" "Latin" "Unitedstates"‘, '- "System OK"

"Englisch" "Latein" "UnitedStates" '. " - "QSettings NICHT OK"

"Englisch" "Latein" "UnitedStates" '. " - „Ungarische NOCH NICHT OK“

und es wie die QLocale aussieht, ist bewusst, dass ich das Komma als Dezimalzeichen verwenden, aber wenn diese QLocale in QSettings gespeichert und zurückgelesen, ist Qt nicht wiederhergestellt werden.

Auch bei dem hier beschriebenen Hack: https://stackoverflow.com/a/11603299/2743307 funktioniert es nicht.

Antwort

0

Es scheint ein Fehler zu sein. Ich habe gerade den Code mit 5.6 und macOS Sierra (10.12.3) getestet und es funktioniert auch ohne den Hack korrekt, aber beim Testen auf Qt 5.8 hat es aufgehört zu arbeiten. Aber wenn Sie die Initialisierung des QSettings ändern, um Einstellungen in einer Datei zu speichern, funktioniert es!

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