【发布时间】:2011-07-12 02:22:38
【问题描述】:
每个人都喜欢
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"
【问题讨论】:
-
我知道,我可以使用
operator + ()进行字符串连接,但在某些地方,例如使用tr()进行翻译,希望保留对模板中的参数重新排序的能力。 -
哇!我从未遇到过这种情况,但如果翻译是字符串“%1”(例如,与 1% 相对),那么它根本无法正常工作。这真的没有意义。看起来他们一遍又一遍地将参数重新应用于结果。
-
不是有可能通过写“%%1”来伪转义“%1”吗?在 arg 调用中使用百分比标记的功能仍然很好。想象一下,您有一个标准错误字符串,使用
%1替换“where”和%2替换“what” - 现在在某些情况下您只需将“where”替换为字符串,在其他情况下您想要一个数字.如果是字符串,您可能希望在其周围加上撇号,如果是数字,则前面的主题标签会很好地提高可读性。现在您可以使用第一个 arg-call 将%1替换为 f.e."#%3"和第三次 arg 调用以插入号码。
标签: qt string-formatting placeholder qstring