QLocale setDefault仅在第二次调用时工作

时间:2017-08-30 14:26:29

标签: qt qlocale

我正在尝试更改代码中<div class="wrapper"> <div class="A">A</div> <div class="B">B</div> </div>变量的默认语言,然后使用每种语言的不同分隔符。我不想为整个系统更改它我只想有机会用不同的组和小数分隔符打印数字。 用户可以将十进制分隔符更改为他或她更喜欢的内容。

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变量似乎需要一些时间或smth才能更改为其他设置。当我更改locale.toString var并因此更改语言时(我对此进行了调试,此部分 已更改,当我要求语言时,它会给出正确的枚举)它会使用之前设置的设置。当我再次调用该函数时,它会给我decSep字符串,然后它正在工作。

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

1 个答案:

答案 0 :(得分:0)

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

请注意,setDefault静态函数,因此它不会更改对象属性本身,即

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