QML Loader 使用注意事項(xiàng)

QML 的 Loader 元素經(jīng)常被用來(lái)動(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):

  1. 如果 source 或者 sourceComponent 更改了,任何先前實(shí)例化的項(xiàng)目都將被自動(dòng)銷毀
  2. source 設(shè)置為空字符串或者 sourceComponent 設(shè)置為 undefined,則銷毀當(dāng)前加載的項(xiàng)目,釋放資源,并將 Loader 設(shè)置為空
  3. Loader 出來(lái)的 qml 界面,在界面關(guān)閉時(shí),一定要清空 Loader 資源
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容