QML 的 Loader 元素經(jīng)常被用來動(dòng)態(tài)加載 QML 組件。可以使用 source
屬性或者 sourceComponent
屬性加載。
這個(gè)元素最有用的地方是它能在 qml 組件需要的時(shí)候再創(chuàng)建,即延遲創(chuàng)建 qml 的控件,提高運(yùn)行速度。
加載與被加載組件中都有相同的事件,那么需要設(shè)置 Loader 的屬性 focus
為 true,且設(shè)置被加載組件 focus: true
才能讓被加載組件捕獲事件。
測(cè)試示例:
// main.qml
import QtQuick 2.12
import QtQuick.Window 2.12
Window {
visible: true
width: 640
height: 480
title: qsTr("Hello World")
Item {
id: rootPage
anchors.fill: parent
property bool isFirst : false
Loader {
id: pageLoader
source: "CPage.qml"
onLoaded: {
rootPage.focus = false
pageLoader.forceActiveFocus()
}
}
Keys.onPressed: {
console.log("Captured: ", event.text)
}
}
}
// CPage.qml
import QtQuick 2.12
Rectangle {
width: 100
height: 62
focus: true
Text {
anchors.centerIn: parent
text: "CPage Test"
}
Keys.onPressed: {
console.log("Loaded item captured: ", event.text)
}
}
Loader 使用注意事項(xiàng):
- 如果
source
或者sourceComponent
更改了,任何先前實(shí)例化的項(xiàng)目都將被自動(dòng)銷毀 - 將
source
設(shè)置為空字符串或者sourceComponent
設(shè)置為undefined
,則銷毀當(dāng)前加載的項(xiàng)目,釋放資源,并將 Loader 設(shè)置為空 - Loader 出來的 qml 界面,在界面關(guān)閉時(shí),一定要清空 Loader 資源