【问题标题】:QString::arg() with number after placeholder占位符后带有数字的 QString::arg()
【发布时间】:2016-06-01 17:13:55
【问题描述】:

我想在字符串上使用 .arg()。这是一个例子:

qDebug() << QString("%11%2").arg(66).arg(77);

我想得到输出 66177 但这当然不是实际输出,因为 %11 被解释为占位符 #11 而不是占位符 #1 后跟文字 1。

还有比以下更好的解决方案吗?

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77);

【问题讨论】:

  • qDebug() &lt;&lt; QString("%011%02").arg(66).arg(77);

标签: qt qstring


【解决方案1】:

arg() 的意义在于它正在替换从%1%99 的所有内容,这就是为什么你不应该拥有%11。有几种方法可以避免这种情况。

您的方式很好,您可以在代码的前面将 1 作为常量:

qDebug() << QString("%1%2%3").arg(66).arg(1).arg(77);

或者你可以有:

qDebug() << QString("%1").arg(66) + "1" + QString("%1").arg(77);

使用QString::number 也可以,正如评论中指定的那样。

【讨论】:

    【解决方案2】:

    尝试以下方法之一:

    • QString::number(66) + "1" + QString::number(77)
    • QString("%1 1 %2").arg(66).arg(77).replace(" ", "")

    【讨论】:

    • 我需要高级数字格式(不能使用 QString::number)。尽管如此,这肯定是标准情况的替代方案。
    • Marek 的解决方案肯定是通用的戳到brainprom
    【解决方案3】:

    arg% 之后的最小值替换序列。范围必须在 1 到 99 之间。 因此,您不必使用1 索引,您可以使用两位数而不是一位数。

    试试这个,看看会发生什么:

    qDebug() << QString("%111%22").arg(66).arg(77);
    

    这应该会给您预期的结果(我已经在 qt 5.4 上对其进行了测试,并且效果很好)。

    我还测试了问题下的解决方案表单评论,它适用于:

    qDebug() << QString("%011%02").arg(66).arg(77);
    

    【讨论】:

    • 很好的解决方案。不过有点难读。绝对需要代码注释。
    猜你喜欢
    • 2013-12-20
    • 2014-09-13
    • 2014-12-25
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2018-10-21
    • 2019-12-18
    • 2016-07-17
    相关资源
    最近更新 更多