Подтвердить что ты не робот

Какова эквивалентность для QString:: arg() в QML

Мне интересно, как у меня может быть строка в QML, которая будет занята некоторыми аргументами? Что-то вроде этого в Qt:

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

Ответ 1

В среде QML функция arg() уже добавлена ​​в прототип строки, поэтому в основном вы можете использовать string.arg() в QML, как С++.

Об этом меньше документации, но я уверен, что он работает в 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

Возможно, вы сможете сделать это с помощью плагина 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")
        }
     }

Ответ 4

Аргументы в этом примере совершенно не нужны. В 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 отображается как %1 в моем коде.Таким образом, это не совсем то же самое, что и QString::arg, но этого будет достаточно в большинстве случаев. Вы также можете написать функцию stringArg с несколькими аргументами замены, но для простоты я просто написал это здесь. )