QML:动态地将Rectangle添加到组件实例的子级

时间:2016-05-12 14:56:40

标签: qml

我有一个我想要动态添加内容的组件:

MyThing.qml: 

Item{
    Rectangle {
        id: r1
    }
}

main.qml

MyThing {
    id: c1
}

在main.qml的下一行代码中,如何在c1中将子矩形动态添加到r1?

1 个答案:

答案 0 :(得分:2)

首先,您必须将r1公开为MyThing.qml中根对象的属性,以便在该范围之外可见。你可以使用alias

来做到这一点

MyThing.qml

import QtQuick 2.0

Item {
    property alias rect: r1

    Rectangle {
        id: r1
        anchors.fill: parent
    }
}

然后,您可以使用Qt.createQmlObject()创建子矩形,例如:

main.qml

import QtQuick 2.0
import QtQuick.Window 2.0

Window {
    width: 600
    height: 400
    visible: true

    MyThing {
        id: c1
        anchors.fill: parent
        Component.onCompleted: {
            Qt.createQmlObject("
                import QtQuick 2.0

                Rectangle {
                    color: \"salmon\"
                    anchors.fill: parent
                    anchors.margins: 10
                }
            ", rect)
        }
    }
}

如果子矩形组件存在于单独的文件中,请使用Qt.createComponent()

对于更结构化的方法,您需要使用某种视图,例如ListView。该视图将负责创建子矩形,并且您只需控制应创建的矩形(通过model属性等)。