QML中如果要布局大量的按扭,如果一个一个的去写,那就太low了,下面介绍一下利用 Qt.createComponent动态创建组件,大家先看一下结果图(确认一下眼神,是否是对的人)

1、createComponent() 函数介绍
/*
* 输入:
* url: 要创建组件的qml文件名称,例如 “TestButton.qml”
* mode: 设置当前创建的方式为同步还是异步(Component.Asynchronous(异步), Component.PreferSynchronous(优先同步))
* parent: 父对象
* 输出:
* object:输出为创建后的组件对象
*/
object createComponent(url, mode, parent)
第一个输入参数url,是要创建组件的qml文件,一般情况下需要填写;
第二个参数为该函数是异步操作还是同步操作,如果不设置,默认为第二个参数Component.PreferSynchronous,该模式下,同步优先,但是也有特殊情况下会异步操作:
1、URL引用网络资源
2、该组件是由于异步加载的另一个组件而创建的
第三个参数是父对象,可以不填写,后续会通过返回object的createObject()来添加父对象。
返回值为组件object,该组件的status有几种状态,如下:
0:Component.Null 组件为空
1:Component.Ready 组件加载成功
2:Component.Loading 组件正在加载中
3:Component.Error 组件加载失败,可以调用component.errorString()查看错误信息
2、createObject()函数介绍
该函数通过创建并返回此组件的对象实例,该实例将具有给定的父级和属性。properties参数是可选的。如果对象创建失败,则返回null。
/*
* 输入:
* parent: 父对象
* object properties: 组件中的属性设置,可选
* 输出:
* object:输出为创建后的组件对象
*/
object createObject(parent, object properties)
第一个输入参数为父对象,如果为空,则创建的组件自身为最高父节点,例如,创建一个新的独立窗口,此时应该将父节点设置为null,否则,需要将qml中父节点的id进行填写。
第二个参数为组件中的属性,例如,可以在创建实例时初始化对应的id,width,height等等。
返回值为对象,如果创建失败,此时返回的对象为null。
// 官方给出的例子,大家可以参考一下。
import QtQuick 2.0
Item {
id: container
width: 300<

最低0.47元/天 解锁文章
281





