c++ - 如何删除 QML 对象

标签 c++ qml

我正在尝试删除 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. 重新创建 ⇒ 控制台输出 createObject

  2. 停止

  3. 重新创建 ⇒ 控制台无输出

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/

相关文章:

c++ - 向 Gtk create 方法发送参数

javascript - 使用 QWebChannel 将 qml 对象公开到网站/Javascript

c++ - QML错误: qrc:/Main. qml:24模块 "system"未安装

c++ - 如何将 SDL_Texture 与 SDL_Renderer 解耦?

c++ - 数组式链表实现C++

c++ - 在哪些情况下 __declspec( align( # ) ) 不能工作?

C++ 可以不继承成员吗?

c++ - 如何在 Blackberry 10 Cascades 的 qml、C++ qt 中响应单击 ListView 中的列表项

javascript - 如何在 QML 中集成 Javascript 库 (socketio)?

qt - 页面呈现/加载所有组件时的事件