繁体   English   中英

如何删除QML对象

[英]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删除它。

  1. recreate ⇒控制台输出createObject

  2. stop

  3. 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM