QML,Loarder异步加载报错:Object destroyed during incubation

QML,Loarder异步加载报错:Object destroyed during incubation

动态加载,控件内容较多

这个时候会出现界面卡顿的问题,为了解决这个问题,QML提供了两种异步加载的方法:
1、使用Loader。
2、使用JavaScript:Qt.createComponent() / Qt.createQmlObject()。

Loader

这里主要讲loader的方式进行异步加载。使用loader方式加载的好处是可以先占个位,需要的时候使用source / sourceComponent进行实际内容的更换/加载。但这个时候,异步小心就会出现标题中的报错。报错的原因正如报错中所说:孵化期间被摧毁。

报错代码
QML,Loarder异步加载报错:Object destroyed during incubation
这里的Button是自定义的Button,出错的地方也就在这里,下面是自定义的Button。
QML,Loarder异步加载报错:Object destroyed during incubation
上图,我们可以看到contentItem和background后面跟着都是一个对象,这里是我们自定义的样式。如果我们没有自定义这些地方,就会出现QML默认的样式。所以,据我推断:是默认的样式销毁是出现了这个报错。
综上所述:当在异步加载的代码中,存在类似上面的代码时,将此可以将这一小部分独立存在以一个loader中进行同步加载,例如:
QML,Loarder异步加载报错:Object destroyed during incubation
QML,Loarder异步加载报错:Object destroyed during incubation
QML,Loarder异步加载报错:Object destroyed during incubation
QML,Loarder异步加载报错:Object destroyed during incubation
QML,Loarder异步加载报错:Object destroyed during incubation
QML,Loarder异步加载报错:Object destroyed during incubation
加载后,通过Loaderid.item可以访问到加载的控件,例如shapeCoBoxComp.item=shapeComboBox.