我正在尝试删除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
删除它。
recreate
⇒控制台输出createObject
↓
stop
↓
recreate
⇒控制台无输出
obj.destroy()
和obj.deleteLater()
都无效。
如何强制删除动态创建的对象,就像在C ++中删除一样。
答案 0 :(得分:0)
请改用Loader
它会动态加载项目,您可以通过将sourceComponent
属性设置为undefined
来销毁它:
Loader {
id: loader
}
Component {
id: myDynComp
Rectangle {
width: 40; height: 40
anchors.centerIn: parent
}
}
Row {
Button {
width: 120; height: 40
text: "Load"
onClicked: {
loader.sourceComponent = myDynComp; //load/create component dynamically
}
}
Button {
width: 120; height: 40
text: "UnLoad"
onClicked: {
loader.sourceComponent = undefined; //causes destoying loaded component
}
}
}
答案 1 :(得分:0)
对S.M.Mousavi's answer的微小更改: 我观察到将sourceComponent设置为undefined无效。我必须将其设置为null才能卸载组件。另一种选择是将源设置为空字符串。
onClicked: {
loader.sourceComponent = null; //causes destroying loaded component
}
OR
onClicked: {
loader.source = ""; //causes destroying loaded component
}