每个人都喜欢
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"
答案 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");