首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QLocale setDefault只在第二时间工作

QLocale setDefault只在第二时间工作
EN

Stack Overflow用户
提问于 2017-08-30 14:26:29
回答 1查看 1K关注 0票数 0

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

代码语言:javascript
复制
//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==".")
}*/

现在有一些代码,我确信这些代码与这个错误没有任何关系。稍后我使用:

代码语言:javascript
复制
//Now this doesn't work

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

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

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

这是已知的问题还是我做错了什么?我能以某种方式更新地区或诸如此类的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-30 14:47:41

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

请注意,setDefault是一个静态函数,因此它不改变对象属性本身,即

代码语言:javascript
复制
locale.setDefault(QLocale::English)

是相同的

代码语言:javascript
复制
QLocale::setDefault(QLocale::English)

示例

以下例子可以澄清这一行为:

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45963061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档