我试图在代码中更改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,我将分隔符默认为给定语言。
现在,我的问题是,区域设置变量似乎需要一些时间或smth才能更改为其他设置。当我更改decSep变量并因此更改语言时(我调试了这个部分,这部分是更改的,当我请求语言时它给出了正确的枚举),它使用了以前设置的设置。然后,当我再次调用这个函数时,它给了我tempNum1字符串,然后它就开始工作了。
这是已知的问题还是我做错了什么?我能以某种方式更新地区或诸如此类的东西吗?
发布于 2017-08-30 14:47:41
您正在设置默认的区域设置,而不是当前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,234https://stackoverflow.com/questions/45963061
复制相似问题