0

我正在尝试更改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我,分隔符默认为给定的语言。

现在我的问题是语言环境变量似乎需要一些时间或技巧才能更改为其他设置。当我更改decSepvar 并因此更改语言时(我对此进行了调试,这部分更改,当我要求提供正确枚举的语言时)它使用先前设置的设置。当我再次调用该函数时,它给了我tempNum1字符串然后它正在工作。

这是一个已知问题还是我做错了什么?我可以以某种方式更新语言环境或类似的东西吗?

4

1 回答 1

1

您正在设置默认语言环境,而不是当前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
于 2017-08-30T14:47:41.157 回答