Qt Qml 中动态创建 & 销毁视频容器技巧(一)
Qt Qml 中动态创建 & 销毁视频容器技巧(一)1、写在前面上一篇我们已经实现了 Qml 在播放直播视频流。然而,对于用户来说,很多时候并不需要进入软件就立即播放视频。并且,不同类型视频应当有不同的 操作&工具&界面。例如:全景的操作和界面应该和相机 (球机 / 枪机)不同,因为后者需要操作云台(PTZ);又比如实时视频和回放视频界面也不一样。因此,最好的方式是实现一种
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
获取更多信息
QQ交流群:102644504
SkeyeVSS综合安防互联网无插件播放解决方案
SkeyeARS全景AR增强监视系统解决方案
SkeyeIVMS集群式视频云管控平台解决方案
Copyright © OpenSKEYE Team 2018-2022
更多推荐
所有评论(0)