我想知道如何在QML中使用带有参数的字符串?就像在Qt中一样:
QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
在QML环境中,arg()函数已经被添加到字符串原型中,因此您可以在QML中像C++一样使用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");
"foo%1 bar%2".arg("bar").arg("foo");
property string str1: "Foo"
property string str2: `${str1}/Bar` // here will "Foo/Bar" as result
你可以使用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")
}
}
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
函数,但为了简单起见,我只编写了这个函数。)