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

Sun*_*hah 5 qt

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

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

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

hmu*_*ner 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";
Run Code Online (Sandbox Code Playgroud)

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


sje*_*397 5

假设我们从:

QString format("%1: %2 %3);
Run Code Online (Sandbox Code Playgroud)

然后打电话:

format.arg("something");
Run Code Online (Sandbox Code Playgroud)

格式现在将是:

"某事:%1%2"

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

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

format = tr("Hi, %1, I hope you are %2");
Run Code Online (Sandbox Code Playgroud)

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