Qt Qml 中动态创建 & 销毁视频容器技巧(一)

1、写在前面

上一篇我们已经实现了 Qml 在播放直播视频流。

然而,对于用户来说,很多时候并不需要进入软件就立即播放视频。

并且,不同类型视频应当有不同的 操作&工具&界面

例如:全景的操作和界面应该和相机 (球机 / 枪机)不同,因为后者需要操作云台(PTZ);又比如实时视频和回放视频界面也不一样。

因此,最好的方式是实现一种容器,通过类型来实例化为不同类型的视频实例,这里简单讲解一下实现。

2、正文开始

一般来讲,Qml 中动态创建对象有两种方式:

  • 使用 JavaScript:Qt.createComponent() / Qt.createQmlObject()。

使用 Qt.createComponent() + Qt.createObject() 的组合或者 Qt.createComponent() + Qt.incubateObject() 的组合.

要销毁它们,只需调用 destroy(int msec), 参数为销毁的延时。

例如下面的的 SelfDestroyingRect.qml,

然后在需要时使用 destroy() 销毁即可:

   import QtQuick 2.14

   Rectangle {
       id: rect
       width: 80; height: 80
       color: "red"

       NumberAnimation on opacity {
           to: 0
           duration: 1000

           onRunningChanged: {
               if (!running) {
                   console.log("Destroying...")
                   rect.destroy();
               }
           }
       }
   }

想要动态创建, 只需在 JS 块 中调用 Qt.createComponent() + Qt.createObject() 即可:

   import QtQuick 2.14

   Item {
       id: container
       width: 500; height: 100

       Component.onCompleted: {
           var component = Qt.createComponent("SelfDestroyingRect.qml");
           for (var i=0; i<5; i++) {
               var object = component.createObject(container);
               object.x = (object.width + 10) * i;
           }
       }
   }

另一方面,对于每一个 Component 组件,也可直接调用它的 createObject() 函数动态创建。

  • 使用 Loader。

很简单,我们可以先声明一个Loader,然后通过动态设置它的 source / sourceComponent 来动态创建.

区别是,source 是 url ( 即 qml 文件,实际上每一个 qml 文件就是一个 Component ),而 sourceComponen 则是 Component。

销毁动态创建的方式也很简单,置空:source = ""sourceComponent = undefined 即可。

例如( SelfDestroyingRect.qml 来自上面 ):

    import QtQuick 2.14
    
    Item {
        width: 200; height: 200
        
        Loader { id: pageLoader }
        
        MouseArea {
            anchors.fill: parent
            onClicked: pageLoader.source = "SelfDestroyingRect.qml"
        }
    }

如果要销毁 (这里是一秒后自动销毁):

    Timer {
        running: true
        interval: 1000
        onTriggered: {
            pageLoader.source = "";
        }
    }

关于SkeyeARS

SkeyeARS全景AR增强监视系统, 是视开科技开发的一款基于宽场景多路视频无缝拼接、视频实时增强、监视目标增强显示、目标自动跟踪、视频存储回放、远程数据传输和多通道全景视频同步显示等功能的综合视频AR增强监视系统,广泛应用于智慧交通、智慧城市、智慧机场等大场景智能监控领域。

详细说明:http://www.openskeye.cn/web/product/ars

获取更多信息

邮件:support@openskeye.cn

QQ交流群:102644504

SkeyeVSS综合安防互联网无插件播放解决方案

SkeyeARS全景AR增强监视系统解决方案

SkeyeIVMS集群式视频云管控平台解决方案

Copyright © OpenSKEYE Team 2018-2022

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐