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有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

QT QT程序初练

QT实现ping命令

动态重新翻译 Qt Quick UI

QT查询串口列表 基于win

QT+PCL 读取文件乱码问题

Qt布局 tab-widget-layout