【发布时间】:2011-06-14 14:59:58
【问题描述】:
我想为 Qt 标签格式化一个字符串,我正在 Qt 上用 C++ 编程。
在 ObjC 中我会写如下内容:
NSString *format=[NSString stringWithFormat: ... ];
如何在 Qt 中做类似的事情?
【问题讨论】:
标签: c++ qt string-formatting
我想为 Qt 标签格式化一个字符串,我正在 Qt 上用 C++ 编程。
在 ObjC 中我会写如下内容:
NSString *format=[NSString stringWithFormat: ... ];
如何在 Qt 中做类似的事情?
【问题讨论】:
标签: c++ qt string-formatting
你可以像这样使用 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") 呢?
您可以使用sprintf 方法,但首选arg 方法,因为它支持unicode。
QString str;
str.sprintf("%s %d", "string", 213);
【讨论】:
使用QString::arg() 获得相同的效果。
【讨论】: