QML

Loader в QML: ленивая загрузка экранов и обработка ошибок

Загрузка компонента по требованию

Loader создаёт компонент только тогда, когда он нужен. Это помогает строить интерфейс с несколькими экранами и не создавать тяжёлые элементы заранее.

Loader {
    id: pageLoader
    anchors.fill: parent
    active: false
    source: "SettingsPage.qml"

    onLoaded: {
        item.title = "Настройки"
    }
    onStatusChanged: {
        if (status === Loader.Error)
            console.error("Не удалось загрузить экран")
    }
}

Button {
    text: "Открыть настройки"
    onClicked: pageLoader.active = true
}

Пока загрузка не завершилась, свойство item может быть пустым. Обращайтесь к созданному объекту после состояния Loader.Ready или в обработчике onLoaded. Состояния Null, Loading, Ready и Error позволяют показать индикатор или сообщение об ошибке.

Когда использовать sourceComponent

Если компонент небольшой или объявлен рядом, задайте sourceComponent вместо пути к файлу. Для крупных экранов отдельный QML-файл удобнее сопровождать. Не создавайте несколько Loader одновременно без необходимости: каждый созданный item потребляет память и может запускать собственные таймеры и обработчики.

Loader управляет жизненным циклом созданного элемента. Учитывайте это, когда экран хранит состояние: при выгрузке элемент будет уничтожен.