Qt中的QString::sprintf和QString::arg有啥区别?
Posted
技术标签:
【中文标题】Qt中的QString::sprintf和QString::arg有啥区别?【英文标题】:what is the difference between QString::sprintf and QString::arg in Qt?Qt中的QString::sprintf和QString::arg有什么区别? 【发布时间】:2010-12-01 09:23:12 【问题描述】:http://doc.qt.io/qt-5/qstring.html#arg 中的 QString 文档说
使用 arg() 的一个优势 sprintf() 是 编号的地方标记可以改变,如果 应用程序的字符串是 翻译成其他语言,但 每个 arg() 仍将替换 编号最小的未替换位置 标记,无论它出现在哪里。
这是什么意思?谁能举例说明一下?
【问题讨论】:
arg() 的另一个优点:sprintf() 是deprecated。 【参考方案1】: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"
【讨论】:
其实RHS的外层QString(...)
是完全多余的……【参考方案2】:
假设我们从:
QString format("%1: %2 %3);
然后调用:
format.arg("something");
格式现在是:
“某事:%1 %2”
...意味着您可以随时构建字符串。
通过Qt的翻译机制可以改变位置标记的顺序,它允许你说:
format = tr("Hi, %1, I hope you are %2");
并将其添加到您的翻译表中,并为不同的语言设置不同的参数顺序。
【讨论】:
【参考方案3】:要添加到 sje397 答案的东西:
当你的应用程序国际化时,你可以有这样的字符串:
QString formatInAnOtherLanguage("%3 %1 %2");
所以打电话的时候
formatInAnOtherLanguage.arg("something");
formatInAnOtherLanguage 将是
"%3 something %2"
这是 arg 函数相对于 sprintf 函数的主要优势
【讨论】:
以上是关于Qt中的QString::sprintf和QString::arg有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章