Я хотів би відформатувати рядок для мітки Qt, я програмую на C ++ на Qt.
У ObjC я б написав щось на зразок:
NSString *format=[NSString stringWithFormat: ... ];
Як зробити щось подібне в Qt?
Я хотів би відформатувати рядок для мітки Qt, я програмую на C ++ на 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 взагалі.
ОНОВЛЕННЯ: Приклади оновлюються завдяки Франку Остерфельду.
ОНОВЛЕННЯ: Приклади оновлюються завдяки alexisdm.
.arg("~", "Tom", 1)
не працює, вам потрібно замінити числовий аргумент окремо: .arg("~", "Tom").arg(1)
або перетворити його в рядок перший: .arg("~", "Tom", QString::number(1))
.
QString("%1 %1 blah blah %1").arg("Tom")
?
Використовуйте QString::arg()
для того ж ефекту.