我想格式化Qt标签的字符串,我正在Qt上用C ++编程。
在ObjC中,我将编写如下内容:
NSString *format=[NSString stringWithFormat: ... ];
如何在Qt中做类似的事情?
Answers:
您可以像这样使用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,然后再将其传递给QString :: arg()。尝试将使用QString的类与使用std :: string的类分开。或者,如果可以,请完全切换到QString。
更新:感谢Frank Osterfeld更新了示例。
更新:由于alexisdm,示例得以更新。
.arg("~", "Tom", 1)
不起作用,您需要单独替换数字参数:.arg("~", "Tom").arg(1)
或先将其转换为字符串:.arg("~", "Tom", QString::number(1))
。
QString("%1 %1 blah blah %1").arg("Tom")
呢
使用QString::arg()
了相同的效果。