在Qt中,QString::sprintf和QString::arg有什么区别?

5

http://doc.qt.io/qt-5/qstring.html#arg中关于QString的文档说:

使用arg()函数的优点是,与sprintf()相比,编号占位符的顺序可以更改,如果应用程序的字符串被翻译成其他语言,但每个arg()仍将替换最低编号的未替换占位符,无论它出现在哪里。

这是什么意思?请给出一个例子进行解释。


1
arg()的另一种优点是:sprintf()已被弃用 - jlstrecker
3个回答

6
int day = 1;
int month = 12;
int year = 2010;
QString dateString = QString(tr("date is %1/%2/%3")).arg(month).arg(day).arg(year);
// dateString == "date is 12/1/2010";

使用德语翻译“日期是:%3.%2.%1”:dateString = “日期是:2010.12.1”


1
实际上,右侧的外部QString(...)是完全多余的。 - SlySven

5

假设我们从以下内容开始:

QString format("%1: %2 %3);

然后调用:

format.arg("something");

新的格式为:

"something: %1 %2"

这意味着您可以逐步构建字符串。

通过Qt的翻译机制,可以改变位置标记的顺序,例如:

format = tr("Hi, %1, I hope you are %2");

并将其添加到您的翻译表中,对于不同的语言,参数顺序也有所不同。


4

补充sje397的回答:

在国际化应用程序时,您可以有这样一个字符串:

QString formatInAnOtherLanguage("%3 %1 %2");

所以,在调用时:
formatInAnOtherLanguage.arg("something");

formatInAnOtherLanguage将会是

"%3 something %2"

这就是arg函数相比sprintf函数的主要优势。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接