gpt4 book ai didi

Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

转载 作者:行者123 更新时间:2023-12-02 08:19:59 31 4
gpt4 key购买 nike

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

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

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

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

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

最佳答案

QString 方法与语言环境无关:它们总是发生在 C 语言环境中。这在 I/O 未本地化时很有用,例如在数据文件中应该可以跨区域移植和/或机器可读。

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

以下注意事项适用于文本 I/O。

  1. 对接受的内容宽容,对输出的内容保守。

  2. 供人类使用的输出,而不是机器可读的数据提取,例如PDF 和 HTML 报告文件,应具有本地化编号。

  3. 机器消耗的输出,例如CSV 和 XML 文件,应使用 C 语言环境。

  4. 文本输入应允许选择所需的输入语言环境,并且应该是宽松的。例如。当使用 CSV 时,它有助于既不直接在输入上使用 QString::toDouble 也不使用 QLocale::toDouble,而是首先对输入进行预处理以检测语言环境并将其转换为固定 C 语言环境,然后才将其提供给 QString::toDouble。例如

    QPair<double, bool> toDouble(QString in) {
    auto dots = in.count('.');
    auto commas = in.count(',');
    if ((dots > 1 && commas > 1) || (dots == 1 && commas ==1))
    // equivocal input
    return qMakePair(0.0, false);
    if (dots > 1 && commas <=1) {
    // dots are group separators
    in.replace(".", "");
    in.replace(',', '.');
    }
    else if (dots <= 1 && commas > 1) {
    // commas are group separators
    in.replace(",", "");
    }
    else if (commas == 1) {
    // assume commas are decimal points
    in.replace(',', '.');
    }
    bool ok;
    auto dbl = in.toDouble(&ok);
    return qMakePair(dbl, ok);
    }

    在实际代码中,您希望不是孤立地而是作为一个集合来检查所有数字,并确保您可以检测到组分隔符和小数点的明确选择,否则您将不得不拒绝输入。

关于Qt 为什么使用 QString::number() 而不是 QLocale().toString()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38085223/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com