如何在Loader中中止加载组件?

Rin*_*dov 4 c++ qt loader qml qqmlcomponent

我有一个Loader加载一些非常重的组件的对象.某些事件到达负载的中间,需要加载停止并返回清空Loader.可能吗?

m79*_*13d 7

中止对象创建

如Qt所述,存在三种卸载/中止对象实例化的方法:

  1. 设置Loader.activefalse
  2. 设置Loader.source为空字符串
  3. 设置Loader.sourceComponentundefined

异步行为

为了能够在加载期间更改这些属性,Loader.asynchronous应该是true,否则GUI线程正忙于加载对象.您还需要QQmlIncubationControllerQQmlEngine来控制用于培养对象的空闲时间.没有这样的控制器Loader.asynchronous就没有任何效果.请注意,QQmlApplicationEngine如果场景包含a ,则自动安装默认控制器QQuickWindow.

错误

直到最后测试的Qt版本(Qt 5.8.0,5.9.0 beta),在中止未完成的对象孵化时存在严重的内存泄漏(至少在某些情况下,包括derM的答案中的示例)导致快速大型组件的内存使用量增加.一个错误报告创建包括建议的解决方案.