我正在尝试删除 QML 对象并像这样重新创建对象:
Rectangle{
property var obj
signal videoStopped(variant complete)
function recreate(url){
if(!obj){
console.log("createObject")
obj = videoComponet.createObject(root)
obj.stopped.connect(function(){
videoStopped(obj.status == MediaPlayer.EndOfMedia)
})
}
obj.source = url
obj.play()
}
function stop(){
obj.destroy() // obj.deleteLater()
}
Component{
id: videoComponet
Video {
anchors.fill: parent
visible: true
autoPlay: true; autoLoad: true
}
}
}
C++端调用recreate
生成对象,调用stop
删除对象。
重新创建
⇒ 控制台输出 createObject↓
停止
↓
重新创建
⇒ 控制台无输出
obj.destroy()
和 obj.deleteLater()
均无效。
如何像C++中的delete一样强制删除动态创建的对象。
最佳答案
对 S.M.Mousavi's answer 的小改动: 我观察到将 sourceComponent 设置为 undefined 不起作用。我必须将其设置为 null 才能卸载组件。另一种选择是将源设置为空字符串。
onClicked: {
loader.sourceComponent = null; //causes destroying loaded component
}
或
onClicked: {
loader.source = ""; //causes destroying loaded component
}
关于c++ - 如何删除 QML 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44902936/