首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt为什么在QLocale().toString()上使用QString::number()?

Qt为什么在QLocale().toString()上使用QString::number()?
EN

Stack Overflow用户
提问于 2016-06-28 19:57:16
回答 1查看 2K关注 0票数 2

我正在开发的应用程序将在许多国家推出,并需要支持它们的语言。我一直在回顾我的代码,并替换了以下所有实例:

QString::number()QString().toDouble()

使用

QLocale().toString()QLocale().toDouble()

我还没有在网上找到很多比较这两个类的方法,但是我对使用后者的影响很感兴趣,如果没有,为什么要使用QString函数呢?

本质上,在进行所有这些更改之前,我只想确保我没有损害我的代码。有人知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 21:04:48

QString方法与地区无关:它们总是发生在C区域设置中。当I/O没有本地化时,这是有用的,例如,在跨地区和/或机器可读的数据文件中,这些文件应该是可移植的。

您绝对不应该随意地将QString方法的每一种使用替换为来自QLocale的本地化对应物!您需要确定哪些用途应该本地化:通常,这些用途将包括UI,也许还包括一些文本文件I/O,其中项目规范声明应该本地化数字I/O。如果规范没有提到这一点,那么首先修改规范并在面向用户的文档中记录行为是值得的。

以下考虑因素适用于案文I/O。

  1. 对你接受的东西要宽容,在你的输出上要保守。
  2. 输出是供人使用,而不是机器可读的数据提取,例如PDF和HTML报告文件,应该有本地化的数字。
  3. 供机器使用的输出(例如CSV和XML文件)应该使用C语言环境。
  4. 文本输入应该允许选择所需的输入区域,并且应该是允许的。例如,在使用CSV时,不需要直接在输入上使用QString::toDoubleQLocale::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);} 在实际代码中,您需要检查所有的数字,而不是孤立的,而是作为一个集合,并确保您可以检测到组分隔符和小数点的明确选择,否则您将不得不拒绝输入。
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38085223

复制
相关文章

相似问题

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