【发布时间】:2012-09-27 07:40:46
【问题描述】:
我想知道如何在 QML 中创建一个包含一些参数的字符串? Qt 中有这样的东西:
QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
【问题讨论】:
我想知道如何在 QML 中创建一个包含一些参数的字符串? Qt 中有这样的东西:
QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
【问题讨论】:
在QML环境中,arg()函数已经添加到字符串原型中,所以基本上你可以像C++一样在QML中使用string.arg()。
关于此的文档较少,但我确信它适用于 Qt 4.7 + QtQuick 1.1
查看 Qt 5 文档:http://qt-project.org/doc/qt-5.0/qtqml/qml-string.html
【讨论】:
只需使用:
"foo%1".arg("bar");
【讨论】:
在这个例子中,参数是完全没有必要的。在 JS 中,我们有简单的字符串连接,它也支持中间的数字,所以你可以用一个简单的方法来实现这一点
var str = 'Number' + ' ' + 12
如果你真的想要非文字字符串中的参数,你可以用替换替换 %1。 QString::arg(带一个论点)无非如下:
function stringArg(str, arg)
{
for(var i = 1; i <= 9; ++i)
if(str.indexOf('%'+i) !== -1)
return str.replace('%'+i, arg);
return str;
}
所以你的代码变成了:
var str = "%1 %2"
str = stringArg(str, "Number")
str = stringArg(str, 12)
(请注意,此函数只能处理%1..%9,而QString::arg 最多可以处理%99。这需要更多逻辑,因为%10 被视为%1在我的代码中。所以这与QString::arg 不完全相同,但在大多数情况下就足够了。你也可以编写一个stringArg 函数接受多个替换参数,但为了简单起见,我只是在这里写了这个。 )
【讨论】:
如果您想要多个参数替换:
"foo%1 bar%2".arg("bar").arg("foo");
【讨论】:
你也许可以使用 jQuery 插件来做到这一点:
http://docs.jquery.com/Plugins/Validation/jQuery.format
import "jQuery.js" as JQuery
Page {
property string labelStub: "hello {0}"
Label {
text: JQuery.validator.format(labelStub, "world")
}
}
【讨论】: