Til*_*gel 24 qstring qt placeholder string-formatting
所有人都喜欢
QString("Put something here %1 and here %2")
.arg(replacement1)
.arg(replacement2);
Run Code Online (Sandbox Code Playgroud)
但是只要你有最微小的机会replacement1实际包含%1甚至是%2任何地方,事情就会变得痒痒.然后,第二个QString::arg()将仅替换重新引入%1或两个%2事件.无论如何,你不会得到"%1"你可能想要的文字.
是否有任何标准技巧可以克服这个问题?
如果你需要一个例子来玩,请拿这个
#include <QCoreApplication>
#include <QDebug>
int main()
{
qDebug() << QString("%1-%2").arg("%1").arg("foo");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这将输出
"foo-%2"
Run Code Online (Sandbox Code Playgroud)
代替
"%1-foo"
Run Code Online (Sandbox Code Playgroud)
可能是预期的(不是).
qDebug() << QString("%1-%2").arg("%2").arg("foo");
Run Code Online (Sandbox Code Playgroud)
给
"foo-foo"
Run Code Online (Sandbox Code Playgroud)
和
qDebug() << QString("%1-%2").arg("%3").arg("foo");
Run Code Online (Sandbox Code Playgroud)
给
"%3-foo"
Run Code Online (Sandbox Code Playgroud)
Joh*_*nny 22
请参阅有关QString :: arg()的Qt文档:
QString str;
str = "%1 %2";
str.arg("%1f", "Hello"); // returns "%1f Hello"
Run Code Online (Sandbox Code Playgroud)
请注意,arg()多个参数的重载仅采用 QString。如果并非所有参数都是 QStrings,您可以更改格式字符串中占位符的顺序:
QString("1%1 2%2 3%3 4%4").arg(int1).arg(string2).arg(string3).arg(int4);
Run Code Online (Sandbox Code Playgroud)
变成
QString("1%1 2%3 3%4 4%2").arg(int1).arg(int4).arg(string2, string3);
Run Code Online (Sandbox Code Playgroud)
这样,所有不是字符串的东西都会先被替换,然后所有的字符串同时被替换。