23

我想知道如何在 QML 中有一个将被一些参数占用的字符串?Qt中的一些类似的东西:

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

5 回答 5

30

在 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

于 2012-12-01T14:49:00.327 回答
19

只需使用:

"foo%1".arg("bar");
于 2013-01-14T14:59:21.487 回答
0

如果您想要多个参数替换:

"foo%1 bar%2".arg("bar").arg("foo");
于 2021-10-08T11:35:49.667 回答
-1

您可以使用 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")
        }
     }
于 2012-10-06T14:03:22.377 回答
-1

在这个例子中,参数是完全没有必要的。在 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多个替换参数的函数,但为了简单起见,我在这里只写了这个。)

于 2012-10-06T19:38:04.730 回答