使用QML中的全局属性动态创建包含文本的元素

时间:2015-03-06 14:12:36

标签: qml

我正在使用Rectangle元素动态创建一些Text,如下所示:

Rectangle {
    id: root
    width: 640; height: 480

    property var items: []
    property int count

    function push() {
        var temp = Qt.createQmlObject("import QtQuick 2.3; Rectangle {width: 100; height: 30;color: 'yellow'; Text {text: count; anchors.centerIn: parent}}", root, "")
        temp.x = Math.floor(Math.random()*200 + 1)
        temp.y = Math.floor(Math.random()*200 + 1)
        items[count] = temp
        count++
    }

    MouseArea {
        anchors.fill: parent
        onClicked: push()
    }
}

现在,每当我通过点击调用push函数时,它都会创建一个当前值为count的新矩形。但问题是到目前为止创建的所有矩形都将其文本更改为count的现值。我需要创建具有count值的矩形,并且当count更改后,它们不应更改其文本。我怎样才能做到这一点?谢谢!

1 个答案:

答案 0 :(得分:2)

您正在创建的Rectangle有以下代码:

Text {
    text: count
    anchors.centerIn: parent
}

此处,text属性与count之间存在绑定。因此,只要count发生变化,text就会反映出这一变化。 您需要转义字符串定义中的计数以实际连接count的当前值,以便第一项的代码为:

Text {
    text: '0'
    anchors.centerIn: parent
}

你的代码应该是:

Rectangle {
    id: root
    width: 640; height: 480

    property var items: []
    property int count

    function push() {
        var temp = Qt.createQmlObject("import QtQuick 2.3; Rectangle {width: 100; height: 30;color: 'yellow'; Text {text: '"+count+"'; anchors.centerIn: parent}}", root, "")
        temp.x = Math.floor(Math.random()*200 + 1)
        temp.y = Math.floor(Math.random()*200 + 1)
        items[count] = temp
        count++
    }

    MouseArea {
        anchors.fill: parent
        onClicked: push()
    }
}