我正在开发的应用程序将在许多国家推出,并需要支持它们的语言。我一直在回顾我的代码,并替换了以下所有实例:
QString::number()和QString().toDouble()
使用
QLocale().toString()和QLocale().toDouble()
我还没有在网上找到很多比较这两个类的方法,但是我对使用后者的影响很感兴趣,如果没有,为什么要使用QString函数呢?
本质上,在进行所有这些更改之前,我只想确保我没有损害我的代码。有人知道吗?
发布于 2016-06-28 21:04:48
QString方法与地区无关:它们总是发生在C区域设置中。当I/O没有本地化时,这是有用的,例如,在跨地区和/或机器可读的数据文件中,这些文件应该是可移植的。
您绝对不应该随意地将QString方法的每一种使用替换为来自QLocale的本地化对应物!您需要确定哪些用途应该本地化:通常,这些用途将包括UI,也许还包括一些文本文件I/O,其中项目规范声明应该本地化数字I/O。如果规范没有提到这一点,那么首先修改规范并在面向用户的文档中记录行为是值得的。
以下考虑因素适用于案文I/O。
QString::toDouble或QLocale::toDouble,而是首先对输入进行预处理以检测区域设置并转换为固定的C语言环境,然后才将其提供给QString::toDouble。例如。
QPair toDouble(QString in) { auto dots = in.count('.');auto逗号= in.count(',');if ((dots >1&逗号> 1) in (dots == 1&逗号==1)) //模棱两可的输入返回qMakePair(0.0,false);if (dots >1 &&逗号<=1) { // dots是组分隔符in.replace(“,”);in.replace(',','.');}如果(点<= 1&逗号> 1) { //逗号是组分隔符in.replace(",","");}如果(逗号== 1) { //假定逗号是小数点in.replace(',','.');} bool ok;auto = in.toDouble(&ok);返回qMakePair( dbl,ok);}
在实际代码中,您需要检查所有的数字,而不是孤立的,而是作为一个集合,并确保您可以检测到组分隔符和小数点的明确选择,否则您将不得不拒绝输入。https://stackoverflow.com/questions/38085223
复制相似问题