我想为Qt标签格式化一个字符串,我在Qt上用C ++编程。
在ObjC中我会写一些类似的东西:
NSString *format=[NSString stringWithFormat: ... ];
如何在Qt中做类似的事情?
答案 0 :(得分:146)
您可以像这样使用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。您需要在std :: string上调用:QString :: fromStdString(),以便在将其传递给QString :: arg()之前将其转换为QString。尝试将使用QString的类与使用std :: string的类分开。或者,如果可以的话,完全切换到QString。
更新:感谢Frank Osterfeld更新了示例。
更新:感谢alexisdm更新了示例。
答案 1 :(得分:28)
您可以使用sprintf
方法,但首选arg
方法,因为它支持unicode。
QString str;
str.sprintf("%s %d", "string", 213);
答案 2 :(得分:4)
使用QString::arg()
获得相同的效果。