在 QML 中,当 Loader 的 sourceComponent 属性变更为其他组件时,之前创建的组件会被销毁。这是因为 Loader 负责加载和卸载不同的组件。
以下是一个简单的例子,演示 Loader 的工作方式:
import QtQuick 2.0
Rectangle {
width: 360
height: 360
ListModel {
id: myModel
ListElement { name: "Item 1"; value: 1 }
ListElement { name: "Item 2"; value: 2 }
ListElement { name: "Item 3"; value: 3 }
}
Button {
text: "Add Item"
anchors.centerIn: parent
onClicked: {
var newItem = { name: "Item " + (myModel.count + 1), value: myModel.count + 1 };
myModel.append(newItem);
}
}
Button {
text: "Remove Item"
anchors.bottom: parent.bottom
onClicked: {
if (myModel.count > 0) {
myModel.remove(myModel.count - 1);
}
}
}
ListView {
anchors.fill: parent
model: myModel
delegate: Text { text: name; font.pixelSize: 24 }
}
}
在这个例子中,初始时 Loader 加载的是蓝色的矩形,带有文字 “Initial Component”。当鼠标点击时,Loader 的 sourceComponent 被切换为红色的矩形,带有文字 “New Component”。在切换时,之前加载的蓝色矩形会被销毁,而新加载的红色矩形会取而代之。