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

时间:2010-12-01 09:23:13

标签: qt

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

  

使用arg()的一个优点   sprintf()是那个的顺序   编号的地方标记可以改变,如果   应用程序的字符串是   翻译成其他语言,但   每个arg()仍将替换   编号最低的未替代地点   标记,无论它出现在何处。

这是什么意思?有人可以用例子来解释吗?

3 个答案:

答案 0 :(得分: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";

德语翻译“Das Datum ist:%2.%1.%3”:dateString =“Das Datum ist:1.12.2010”

答案 1 :(得分:5)

假设我们从:

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

然后致电:

format.arg("something");

格式现在为:

  

“某事:%1%2”

...意思是你可以随时建立字符串。

通过Qt的翻译机制可以改变地点标记的顺序,你可以这样说:

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

并将其添加到您的翻译表中,并为不同的语言提供不同顺序的参数。

答案 2 :(得分:4)

要添加到sje397的答案:

在国际化您的应用程序时,您可以使用以下字符串:

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

所以在致电时

formatInAnOtherLanguage.arg("something");

formatInAnOtherLanguage将

"%3 something %2"

这是arg函数相对于sprintf函数的主要优点