1

前提: 私は 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://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

出力は次のとおりです。

"English" "Latin" "UnitedStates" ',' - "System OK"

「英語」「ラテン語」「米国」「.」- 「QSettings NOT OK」

「英語」「ラテン語」「米国」「.」-「ハンガリー語はまだOKではありません」

QLocaleカンマを小数点記号として使用していることを認識しているようですが、これQLocaleが格納されQSettingsて読み戻されると、Qtはそれを回復しません。

また、ここで説明されているハックを試してみても、https://stackoverflow.com/a/11603299/2743307は機能しません。

4

1 に答える 1