我想知道如何在 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");
如果您想要多个参数替换:
"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")
}
}
在这个例子中,参数是完全没有必要的。在 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
被视为 a %1
。所以这与 不完全相同QString::arg
,但在大多数情况下就足够了. 你也可以编写一个带有stringArg
多个替换参数的函数,但为了简单起见,我在这里只写了这个。)