在 QML 中使用来自全局 属性 的文本动态创建元素

Dynamically creating elements with text from a global property in QML

我正在动态创建一些 Rectangles,其中包含一个 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 更改后记时它们不应更改其文本。我怎样才能做到这一点?谢谢!

您正在创建的 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()
    }
}