Qt 4.8
Loader Class Reference

The Loader item allows dynamically loading an Item-based subtree from a URL or Component. More...

Inheritance diagram for Loader:
Item

Detailed Description

The Loader item allows dynamically loading an Item-based subtree from a URL or Component.

Since
4.7

Loader is used to dynamically load visual QML components. It can load a QML file (using the source property) or a Component object (using the sourceComponent property). It is useful for delaying the creation of a component until it is required: for example, when a component should be created on demand, or when a component should not be created unnecessarily for performance reasons.

Here is a Loader that loads "Page1.qml" as a component when the MouseArea is clicked:

import QtQuick 1.0
Item {
width: 200; height: 200
Loader { id: pageLoader }
MouseArea {
anchors.fill: parent
onClicked: pageLoader.source = "Page1.qml"
}
}

The loaded item can be accessed using the item property.

If the source or sourceComponent changes, any previously instantiated items are destroyed. Setting source to an empty string or setting sourceComponent to undefined destroys the currently loaded item, freeing resources and leaving the Loader empty.

Loader sizing behavior

Loader is like any other visual item and must be positioned and sized accordingly to become visible.

In both scenarios the size of the item and the Loader are identical. This ensures that anchoring to the Loader is equivalent to anchoring to the loaded item.

sizeloader.qml sizeitem.qml
import QtQuick 1.0
Item {
width: 200; height: 200
Loader {
// Explicitly set the size of the Loader to the parent item's size
anchors.fill: parent
sourceComponent: rect
}
Component {
id: rect
Rectangle {
width: 50
height: 50
color: "red"
}
}
}
import QtQuick 1.0
Item {
width: 200; height: 200
Loader {
// position the Loader in the center of the parent
anchors.centerIn: parent
sourceComponent: rect
}
Component {
id: rect
Rectangle {
width: 50
height: 50
color: "red"
}
}
}
The red rectangle will be sized to the size of the root item. The red rectangle will be 50x50, centered in the root item.

Receiving signals from loaded items

Any signals emitted from the loaded item can be received using the Connections element. For example, the following application.qml loads MyItem.qml, and is able to receive the message signal from the loaded item through a Connections object:

application.qml MyItem.qml
import QtQuick 1.0
Item {
width: 100; height: 100
Loader {
id: myLoader
source: "MyItem.qml"
}
Connections {
target: myLoader.item
onMessage: console.log(msg)
}
}
import QtQuick 1.0
Rectangle {
id: myItem
signal message(string msg)
width: 100; height: 100
MouseArea {
anchors.fill: parent
onClicked: myItem.message("clicked!")
}
}

Alternatively, since MyItem.qml is loaded within the scope of the Loader, it could also directly call any function defined in the Loader or its parent Item .

Focus and key events

Loader is a focus scope. Its Item::focus property must be set to true for any of its children to get the {active focus}. (See the focus documentation page for more details.) Any key events received in the loaded item should likely also be KeyEvent::accepted so they are not propagated to the Loader.

For example, the following application.qml loads KeyReader.qml when the MouseArea is clicked. Notice the Item::focus property is set to true for the Loader as well as the Item in the dynamically loaded object:

application.qml KeyReader.qml
import QtQuick 1.0
Rectangle {
width: 200; height: 200
Loader {
id: loader
focus: true
}
MouseArea {
anchors.fill: parent
onClicked: loader.source = "KeyReader.qml"
}
Keys.onPressed: {
console.log("Captured:", event.text);
}
}
import QtQuick 1.0
Item {
Item {
focus: true
Keys.onPressed: {
console.log("Loaded item captured:", event.text);
event.accepted = true;
}
}
}

Once KeyReader.qml is loaded, it accepts key events and sets event.accepted to true so that the event is not propagated to the parent Rectangle .

See also
{dynamic-object-creation}{Dynamic Object Creation}

The documentation for this class was generated from the following file: