作者:老王瞎聊 ![]() 1. 利用Loader动态创建与销毁组件 加载与销毁代码: ![]() Loader的代码: ![]() ![]() (只有 Loader 有焦点,它加载的 Item 才会有焦点) 卸载 Loader所加载的组件的两种方式:将source或sourceComponent属性设置为undefined或空字符串来卸载。 2. 在ECMAScript中动态的创建、销毁对象 QML支持在ECMAScript中动态创建对象。这对于延迟对象的创建、缩短应用的启动时间都是有帮助的。同时这种机制也使得我们可以根据用户的输入或者某些事件动态地将可见元素添加到应用场景中。 从组件文件动态创建Component: objectcreateComponent(url, mode, parent) 第一个参数url指向QML文档的本地路径或网络地址:第二个参数mode指定创建组件的模式,可以是 Component.PreferSynchronous (优先使用同步模式)或 Component.Asynchronous (异步模式),忽略 mode 参数时,默认使用 PreferSynchronous 模式: parent 参数指定组件的父对象。 ![]() Qt.createComponent()创建一个ColorPicker 组件,然后调用 Component.create Object()创建一个颜色选择组件实例。createObject()方法有两个参数,第一个参数用来指定创建出来的Item 的 parent,第二个参数用来传递初始化参数给待创建的Item。 注:对于嵌入在 QML文档内定义的Component,因为Component对象是现成的,可以略去Qt.createComponent()调用,直接使用createObject()方法创建组件实例。 createObject函数 varnewObject = Qt.createQmlObject(’import QtQuick 2.2; Rectangle(color :” red”; width: 20; height: 20 )’, parentitem,”dynamicSnippet l ”) ; 销毁: 用其 destroy()方法。 destroy()方法有一个可选的参数,指定延迟多少毫秒再删除这个对象,其默认值为 0。 destroy ()方法有点儿像 Qt C++中QObject 的delete Later ()方法,即便你设定延迟为 0 去调用它,对象也并不会立即删除, QML 引擎会在当前代码块执行结束后的某个合适的时刻删除它们。所以,即便你在一个对象内部调用destroy()方法也是安全的。 ![]() ![]() —————————————————————————————————— 参考Qt Quick核心编程 ------------------------------------------------------------------------- 我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。 ------------------------------------------------------------------------- |