【问题标题】: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

标签: qt


【解决方案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 函数的主要优势

    【讨论】:

      猜你喜欢
      • 2013-08-19
      • 1970-01-01
      • 2013-05-20
      • 1970-01-01
      • 2012-09-27
      • 2013-12-20
      • 2012-06-04
      • 1970-01-01
      • 2021-11-16
      相关资源
      最近更新 更多