我想为Qt标签格式化一个字符串,我在Qt上用C++进行编程。
在ObjC中,我会写类似于:
NSString *format=[NSString stringWithFormat: ... ];
如何在Qt中实现类似的功能?
我想为Qt标签格式化一个字符串,我在Qt上用C++进行编程。
在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::arg() 之前调用 QString::fromStdString() 将其转换为 QString。尽量将使用 QString 的类与使用 std::string 的类分开。或者,如果可以的话,完全切换到 QString。
更新:感谢 Frank Osterfeld 更新了示例。
更新:感谢 alexisdm 更新了示例。
QString str;
str.sprintf("%s %d", "string", 213);
", "Tom", "Jane") 的结果是“”。并不像一开始看起来那么有用... - iforce2d.arg("~", "Tom", 1)
无效,你需要分别替换数字参数:.arg("~", "Tom").arg(1)
,或者先将其转换为字符串:.arg("~", "Tom", QString::number(1))
。 - alexisdmQString("%1 %1 blah blah %1").arg("Tom")
这个怎么样? - cmeub