Я хотел бы отформатировать строку для метки Qt, я программирую на С++ на Qt.
В ObjC я бы написал что-то вроде:
NSString *format=[NSString stringWithFormat: ... ];
Как сделать что-то подобное в Qt?
Я хотел бы отформатировать строку для метки Qt, я программирую на С++ на Qt.
В ObjC я бы написал что-то вроде:
NSString *format=[NSString stringWithFormat: ... ];
Как сделать что-то подобное в Qt?
Вы можете использовать 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.
Вы можете использовать метод sprintf
, однако метод arg
является предпочтительным, так как он поддерживает unicode.
QString str;
str.sprintf("%s %d", "string", 213);
Используйте QString::arg()
для того же эффекта.