Как отформатировать QString? - PullRequest
68 голосов
/ 24 января 2011

Я бы хотел отформатировать строку для метки Qt, я программирую на C ++ на Qt.

В ObjC я бы написал что-то вроде:

NSString *format=[NSString stringWithFormat: ... ];

Как это сделатьчто-то подобное в Qt?

Ответы [ 3 ]

147 голосов
/ 24 января 2011

Вы можете использовать QString.arg следующим образом

QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", "Jane");
// You get "~/Tom-Jane.txt"

Этот метод предпочтительнее, чем sprintf, потому что:

Изменение позиции строки без необходимости изменения порядка подстановки, например

// To get "~/Jane-Tom.txt"
QString my_formatted_string = QString("%1/%3-%2.txt").arg("~", "Tom", "Jane");

Или, изменение типа аргументов не требует изменения строки формата, например,

// To get "~/Tom-1.txt"
QString my_formatted_string = QString("%1/%2-%3.txt").arg("~", "Tom", QString::number(1));

Как видите, изменение минимально.Конечно, вам обычно не нужно заботиться о типе, который передается в QString :: arg (), так как большинство типов корректно перегружены.

Хотя есть один недостаток: QString :: arg () не обрабатываетстанд :: строка.Вам нужно вызвать: QString :: fromStdString () в вашей std :: string, чтобы превратить его в QString перед передачей его в QString :: arg ().Попробуйте отделить классы, которые используют QString, от классов, которые используют std :: string.Или, если можете, переключитесь на QString.

ОБНОВЛЕНИЕ: примеры обновляются благодаря Фрэнку Остерфельду.

ОБНОВЛЕНИЕ: Примеры обновляются благодаря alexisdm.

28 голосов
/ 24 января 2011

Вы можете использовать метод sprintf, однако метод arg предпочтительнее, так как он поддерживает Unicode.

QString str;
str.sprintf("%s %d", "string", 213);
4 голосов
/ 24 января 2011

Используйте QString::arg() для того же эффекта.

...