QML中QString :: arg()的等价性是什么?

时间:2012-10-06 08:56:39

标签: qt qml qstring

我想知道如何在QML中使用一些字符串来填充一些参数?在Qt中有这样的事情:

QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"

4 个答案:

答案 0 :(得分:24)

在QML环境中,arg()函数已经添加到字符串原型中,所以基本上你可以像Q ++一样在QML中使用string.arg()。

关于此的文档较少,但我确信它适用于Qt 4.7 + QtQuick 1.1

看看Qt 5 doc:http://qt-project.org/doc/qt-5.0/qtqml/qml-string.html

答案 1 :(得分:15)

只需使用:

"foo%1".arg("bar");

答案 2 :(得分:1)

此示例中完全没有参数。在JS中,我们有简单的字符串连接,它也支持两者之间的数字,所以你可以用一个简单的

来实现
var str = 'Number' + ' ' + 12

如果你真的想要非文字字符串中的参数,你可以用替换替换%1QString::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。这需要更多逻辑,因为{{ 1}}在我的代码中被设为%10。所以这与%1不完全相同,但在大多数情况下它都足够了。你也可以写一个QString::arg函数采取多个替换参数,但为了简单起见,我在这里写了这个。)

答案 3 :(得分:0)

您可以使用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")
        }
     }