如何在QString :: arg()的参数中处理“%1”?

时间:2011-03-09 17:19:47

标签: qt string-formatting placeholder qstring

每个人都喜欢

QString("Put something here %1 and here %2")
    .arg(replacement1)
    .arg(replacement2);

但是只要你replacement1实际上包含%1甚至%2的任何地方都有最微小的机会,事情就会变得痒痒。然后,第二个QString::arg()将仅替换重新引入的%1或两个%2次出现。无论如何,你不会得到你可能想要的文字"%1"

有没有任何标准技巧可以解决这个问题?

如果您需要一个示例,请使用此

#include <QCoreApplication>
#include <QDebug>

int main()
{
    qDebug() << QString("%1-%2").arg("%1").arg("foo");
    return 0;
}

这将输出

"foo-%2"

而不是

"%1-foo"

可能是预期的(不是)。

    qDebug() << QString("%1-%2").arg("%2").arg("foo");

给出

"foo-foo"

    qDebug() << QString("%1-%2").arg("%3").arg("foo");

给出

"%3-foo"

3 个答案:

答案 0 :(得分:19)

请参阅有关QString::arg()的Qt文档:

QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"

答案 1 :(得分:3)

请注意,多个参数的arg()重载仅需要QString。如果并非所有参数都是QStrings,您可以在格式字符串中更改占位符的顺序:

QString("1%1 2%2 3%3 4%4").arg(int1).arg(string2).arg(string3).arg(int4);

变为

QString("1%1 2%3 3%4 4%2").arg(int1).arg(int4).arg(string2, string3);

这样,首先替换不是字符串的所有内容,然后同时替换所有字符串。

答案 2 :(得分:2)

你应该尝试使用

QString("%1-%2").arg("%2","foo");