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

Qt中的QString::sprintf和QString::arg之间有什么区别?,qt,Qt,中的QString文档 使用arg()的一个优点是 sprintf()是 如果需要,编号的位置标记可以更改 应用程序的字符串是 翻译成其他语言,但是 每个arg()仍将替换 编号最低的未替换位置 标记,无论它出现在哪里 这是什么意思?有人能举例说明吗?先说: QString format("%1: %2 %3); 然后打电话: format.arg("something"); 现在的格式为: “某些内容:%1%2” …这意味着你可以一边走一边构建字符串 可以通过Qt的翻译机制更改位置标记的顺

中的QString文档

使用arg()的一个优点是 sprintf()是 如果需要,编号的位置标记可以更改 应用程序的字符串是 翻译成其他语言,但是 每个arg()仍将替换 编号最低的未替换位置 标记,无论它出现在哪里

这是什么意思?有人能举例说明吗?

先说:

QString format("%1: %2 %3);
然后打电话:

format.arg("something");
现在的格式为:

“某些内容:%1%2”

…这意味着你可以一边走一边构建字符串

可以通过Qt的翻译机制更改位置标记的顺序,该机制允许您说:

format = tr("Hi, %1, I hope you are %2");
并将其添加到翻译表中,使参数按不同语言的不同顺序排列

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”

要添加到sje397中的内容回答:

将应用程序国际化时,可以使用如下字符串:

QString formatInAnOtherLanguage("%3 %1 %2");
所以打电话的时候

formatInAnOtherLanguage.arg("something");
其他语言中的格式将是

"%3 something %2"

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

arg()的另一个优点:sprintf()是。实际上,RHS上的外部
QString(…)
是完全冗余的。。。