如何格式化QString?

时间:2011-01-24 16:07:20

标签: c++ qt string-formatting

我想为Qt标签格式化一个字符串,我在Qt上用C ++编程。

在ObjC中我会写一些类似的东西:

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

如何在Qt中做类似的事情?

3 个答案:

答案 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()获得相同的效果。