QML----动态创建对象-创新互联

在工程中有很多情况是需要动态创建对象来完成需求的,QML当中也是可以进行动态创建的,创建的范围包括但不限于组件和对象。

成都创新互联是专业的金东网站建设公司,金东接单;提供成都做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行金东网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

首先想要动态创建组件需要了解组件是什么

一、Component

Component是由一个由开发者封装好的,只暴露必要接口的QML类型,可以重复使用,有点像类的概念但又不完全像。下面是一个组件的定义:

Component{
        id:id_Comp
        Rectangle{
            id:id_Root
            width: 200
            height: 200
            color: mData ? "red" : "blue"
            property bool mData: false
            MouseArea{
                anchors.fill: parent
                onClicked: {
                    id_Root.mData = !id_Root.mData
                }
            }
        }
    }

这就是定义了一个点击变色的矩形组件,组件的定义要求就是只能包含一个顶层Item,并且在这个Item之外不能定义除了Id之外的任何数据,它通常是给view提供图形化组件的,它本身不是一个可见元素,必须要实例化后才能显示。而示例化的方式可以静态添加也可以动态创建,这里主要讲一下动态创建。注:定义Component时组件名与文件名一致,组件名首字母大写。组件实例的id和组成组件的顶层Item的id是各自独立的。

二、动态创建的方式

1.Loader

Loader用来动态加载QML组件,可以把它当作一个占位符,需要用时才加载。下面是Loader的实例:

Loader{
        id:id_loader
        sourceComponent: id_Comp
    }

通过代码就可以知道loader只需要设置sourceComponent或source属性,就可以把组件加载进来,当sourceComponent或source发生改变时会重新加载对象,之前加载的对象会被销毁。当sourceComponent或source为空或者undefined时,会销毁当前加载的对象,相关资源也会释放,而loader对象则会变为一个空对象。loader的item属性指向了它顶层item,所以可以通过访问loader的item去修改被加载对象的属性。如果组件过大,加载起来非常耗费资源,可以采用异步加载的方式只需要将asynchronous属性设置为true就可以了。

2.在ECMAScript中动态创建对象

在ECMAScript中,有两种方式可以动态创建:

a.使用Qt.CreateComponent()动态创建一个组件对象,然后使用Component的createObject()方法创建对象

var component = Qt.createComponent("Button.qml");
        if (component.status == Component.Ready) {
            var button = component.createObject(parent,
            {"width":120,"height":120});
        }

返回的button对象就行动态创建出来的对象的地址,可以通过button去修改对象的属性

createObject函数第一个参数指定parent,后面的列表指定属性

b.使用Qt.createQmlObject()从QML字符串直接创建一个对象

这种情况适用于在同一个qml文件内部就进行创建

const newObject = Qt.createQmlObject(`
     import QtQuick 2.0

     Rectangle {
         color: "red"
         width: 20
         height: 20
     }
     `,
     parentItem,
     "myDynamicSnippet"
 );

第一个参数是需要创建的QML对象的描述文档,第二个参数是指定parent,第三个参数是关联文件,用于错误报告

注意:动态创建的对象不需要使用之后应该进行销毁,如果是loader进行管理的就将source或者sourceComponent设置为空,其它的就应该调用destroy()方法进行销毁,这个函数的唯一参数是指定多少毫秒再进行删除,不写就为0,立即删除。

常规的动态创建方法基本就是上述三种,还有些非常规的比如Repeater,这个在之后的文章进行单独介绍

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:QML----动态创建对象-创新互联
路径分享:http://pwwzsj.com/article/hhiji.html