Подтвердить что ты не робот

Как отформатировать QString?

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

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

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

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

4b9b3361

Ответ 1

Вы можете использовать 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() не обрабатывает std::string. Вам нужно будет вызвать QString:: fromStdString() на std::string, чтобы перейти в QString, прежде чем передать его в QString:: arg(). Попробуйте отделить классы, которые используют QString от классов, использующих std::string. Или, если можно, переключитесь на QString вообще.

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

UPDATE: примеры обновляются с помощью alexisdm.

Ответ 2

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

QString str;
str.sprintf("%s %d", "string", 213);

Ответ 3

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