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

26

我想知道如何在QML中使用带有参数的字符串?就像在Qt中一样:

QString str("%1 %2");
str = str.arg("Number").arg(12);//str = "Number 12"
6个回答

37

在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


23

只需要使用:

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

3
如果您想进行多个参数替换:
"foo%1 bar%2".arg("bar").arg("foo");

2
property string str1: "Foo"
property string str2: `${str1}/Bar` // here will "Foo/Bar" as result

-1

-3
参数在这个例子中完全是不必要的。在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。这需要更多的逻辑,因为在我的代码中,%10被视为%1。因此,这与QString::arg并不完全相同,但在大多数情况下足以满足需求。您也可以编写一个接受多个替换参数的stringArg函数,但为了简单起见,我只编写了这个函数。)


这个“简单”的字符串拼接涉及到太多的内部转换,而且这些转换也相当不一致。 - Alex Petrosyan
4
这会导致难以翻译的应用程序。并不是一个好主意。 - André
1
这对翻译来说并不有用。有时在翻译成其他语言时需要改变单词的顺序。 - Paweł Iwaneczko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接