本文最后更新于:2021年2月5日 晚上
Loader
是用来动态加载 QML
组件的。我们可以把 Loader
作为占位符使用,在需要显示某个元素时,才使用 Loader
把它加载进来。
Loader
可以使用其 source
属性加载一个 QML
文档,也可以通过其 sourceComponent
属性加载一个Component
对象。当你需要延迟一些对象直到真正需要才创建它们时,Loader
非常有用。当 Loader
的 source
或 sourceComponent
属性发生变化时,它之前加载的 Component
会自动销毁,新对象会被加载。将 source
设置为一个字符串或将 sourceComponent
设置为 undefined
,将会销毁当前加载的对象,相关的资源也会被释放,而 Loader
对象则变成一个空对象。
下面展示一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| import QtQuick 2.12 import QtQuick.Window 2.12
Window { width: 640 height: 480 visible: true title: qsTr("Hello World")
Rectangle { anchors.fill: parent color: "#C0C0C0"
Text { id: coloredText anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top anchors.topMargin: 4 text: qsTr("Hello World!") font.pixelSize: 32 }
Component { id: colorComponent Rectangle { id: colorPicker width: 50 height: 30 signal colorPicked(color clr) property Item loader border.width: focus ? 2 : 0 border.color: focus ? "#90D750" : "#808080" MouseArea { anchors.fill: parent onClicked: { colorPicker.colorPicked(colorPicker.color) loader.focus = true } }
Keys.onReturnPressed: { colorPicker.colorPicked(colorPicker.color) event.accepted = true } Keys.onSpacePressed: { colorPicker.colorPicked(colorPicker.color) event.accepted = true } } }
Loader { id: redLoader width: 80 height: 60 focus: true anchors.left: parent.left anchors.leftMargin: 4 anchors.bottom: parent.bottom anchors.bottomMargin: 4 sourceComponent: colorComponent KeyNavigation.right: blueLoader KeyNavigation.tab: blueLoader onLoaded: { item.color = "red" item.focus = true item.loader = redLoader } onFocusChanged: { item.focus = focus } }
Loader { id: blueLoader anchors.left: redLoader.right anchors.leftMargin: 4 anchors.bottom: parent.bottom anchors.bottomMargin: 4 sourceComponent: colorComponent KeyNavigation.left: redLoader KeyNavigation.tab: redLoader onLoaded: { item.color = "blue" item.loader = blueLoader } onFocusChanged: { item.focus = focus } }
Connections { target: redLoader.item onColorPicked: { coloredText.color = clr } }
Connections { target: blueLoader.item onColorPicked: { coloredText.color = clr } } } }
|