【问题标题】:What is the equivalence for QString::arg() in QMLQML 中 QString::arg() 的等价物是什么
【发布时间】:2012-09-27 07:40:46
【问题描述】:

我想知道如何在 QML 中创建一个包含一些参数的字符串? Qt 中有这样的东西:

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

【问题讨论】:

    标签: qt qml qstring


    【解决方案1】:

    在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

    【讨论】:

      【解决方案2】:

      只需使用:

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

      【讨论】:

        【解决方案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 函数接受多个替换参数,但为了简单起见,我只是在这里写了这个。 )

        【讨论】:

        • 这种“简单”的字符串连接有太多的内部转换,也相当不一致。
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          你也许可以使用 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")
                  }
               }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-05-08
            • 2014-06-12
            • 1970-01-01
            • 2022-11-28
            • 2021-06-19
            • 2012-07-20
            • 2023-03-30
            • 2011-04-08
            相关资源
            最近更新 更多