Skip to content
KerwinKoo edited this page Dec 28, 2015 · 2 revisions

Qt5.4 QML Loader动态加载

Loader 用来动态加载 QML 组件。

Loader 可以使用其 source 属性加载一个 qml 文档,也可以通过其 sourceComponent 属性加载一个 Component 对象。

当你需要延迟一些对象直到真正需要才创建它们时, Loader 非常有用。 当 Loader 的 source 或 sourceComponent 属性发生变化时,它之前加载的 Component 会自动销毁,新对象会被加载。

将 source 设置为一个空字符串或将 sourceComponent 设置为 undefined ,将会销毁当前加载的对象,相关的资源也会被释放,而 Loader 对象则变成一个空对象。

Loader 的 item 属性指向它加载的组件的顶层 item ,比如 Loader 加载了我们的颜色选择组件,其 item 属性就指向颜色选择组件的 Rectangle 对象。

对于 Loader 加载的 item ,它暴露出来的接口,如属性、信号等,都可以通过 Loader 的 item 属性来访问。所以我们才可以这么使用:

    Loader{
        id: redLoader;
        anchors.left: parent.left;						//处理当前组件的位置
        anchors.leftMargin: 4;
        anchors.bottom: parent.bottom;
        anchors.bottomMargin: 4;
        sourceComponent: colorComponent;		//加载 id 为 colorComponent 的组件对象
        onLoaded:{
            item.color = "red";							//设置颜色选择组件的颜色。
        }
    }

上面的代码在 Loader 对象使用 sourceComponent 属性来加载 id 为 colorComponent 的组件对象,然后在 onLoaded 信号处理器中使用 item 属性来设置颜色选择组件的颜色。

对于信号的访问,我们则可以使用 Connections 对象,如下面的 qml 代码所示:

    Connections {
        target: redLoader.item;			//指向**颜色选择组件的顶层 item —— Rectangle **
        onColorPicked:{
            coloredText.color = clr;
        }
    }

我们创建的 Connections 对象,其 target 指向 redLoader.item ,即指向 颜色选择组件的顶层 item —— Rectangle ,所以可以直接响应它的 colorPicked 信号。

[[TOC]]

Clone this wiki locally