В чем разница между QString :: sprintf и QString :: arg в Qt? - PullRequest
5 голосов
/ 01 декабря 2010

Документация QString в http://doc.qt.io/qt-5/qstring.html#arg говорит

Одно из преимуществ использования arg () перед sprintf () состоит в том, что порядок нумерованных маркеров места может измениться, если строки приложенияпереведены на другие языки, но каждый arg () по-прежнему будет заменять маркер с неразмещенным местами с наименьшим номером, независимо от того, где он появляется.

в чем смысл этого?Может кто-нибудь объяснить, пожалуйста, с примером?

Ответы [ 3 ]

6 голосов
/ 01 декабря 2010
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"

5 голосов
/ 01 декабря 2010

Скажем, мы начинаем с:

QString format("%1: %2 %3);

Тогда звоните:

format.arg("something");

Формат теперь будет:

"что-то:% 1% 2"

... означает, что вы можете создать строку по ходу дела.

Изменение порядка маркеров мест возможно с помощью механизма перевода Qt, который позволяет вам сказать:

format = tr("Hi, %1, I hope you are %2");

и добавьте его в свою таблицу перевода, и у вас есть параметры в другом порядке для разных языков.

4 голосов
/ 01 декабря 2010

Что добавить к ответу sje397:

При интернационализации вашего приложения вы можете иметь такую ​​строку:

QString formatInAnOtherLanguage("%3 %1 %2");

Поэтому при вызове

formatInAnOtherLanguage.arg("something");

formatInAnOtherLanguage будет

"%3 something %2"

Это главное преимущество функции arg над функцией sprintf

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...