[英]How to delete QML object
我正在尝试删除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 ++中的delete一样,如何强制删除动态创建的对象。
请改用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
}
}
}
对SMMousavi答案的一个小改动:我观察到将sourceComponent设置为undefined无效。 我必须将其设置为null才能卸载组件。 另一种选择是将源设置为空字符串。
onClicked: {
loader.sourceComponent = null; //causes destroying loaded component
}
要么
onClicked: {
loader.source = ""; //causes destroying loaded component
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.