QLocale setDefault 仅在第二次调用时有效

QLocale setDefault only works at 2nd time called

我正在尝试更改代码中 QLocale 变量的默认语言,然后使用每种语言的不同分隔符。我不想为整个系统更改它,我只是想有机会使用不同的组和小数点分隔符打印数字。 用户可以将小数分隔符更改为他或她喜欢的。

//this part works as expected in debugger
QLocale locale;

if(decSep==".")
{
    locale.setDefault(QLocale::English); 
}
else if(decSep==",")
{
    locale.setDefault(QLocale::German);
}
else
{
    locale.setDefault(QLocale::system().language());
}

//added for debug purposes
/*if(local.language()==QLocale::English)
{
    int x=0;//jumped here when it was supposed to do so (decSep==".")
}*/

现在有一些代码我确定与此错误无关。 后来我用:

//Now this doesn't work

QString tempNum1 = locale.toString(myNum, 'f');

使用 locale.toString 我将分隔符默认为给定的语言。

现在我的问题是语言环境变量似乎需要一些时间才能更改为其他设置。当我更改 decSep var 并因此更改语言时(我调试了这个,这部分 is 更改了,当我要求语言时它给出了正确的枚举)它使用之前设定的设置。当我再次调用该函数时,它给了我 tempNum1 字符串然后它正在工作。

这是一个已知问题还是我做错了什么?我能以某种方式更新区域设置或类似的东西吗?

您正在设置默认区域设置,而不是当前 QLocale 对象的语言。

请注意 setDefault 是一个 static 函数,因此它不会更改对象属性本身,即

locale.setDefault(QLocale::English)

相同
QLocale::setDefault(QLocale::English)

例子

以下示例可以阐明此行为:

QLocale locale;
QLocale localeGerman(QLocale::German);
qDebug() << locale.toString(1.234, 'f'); // returns 1.234
qDebug() << localeGerman.toString(1.234, 'f'); // returns 1,234
QLocale::setDefault(QLocale::German); // same as locale.setDefault(QLocale::German);
qDebug() << locale.toString(1.234, 'f'); // returns still 1.234
QLocale locale2;
qDebug() << locale2.toString(1.234, 'f'); // returns 1,234
locale = localeGerman;
qDebug() << locale.toString(1.234, 'f'); // returns 1,234