Qt怎样实现通用视频控件
发表于:2025-02-13 作者:千家信息网编辑
千家信息网最后更新 2025年02月13日,这篇文章主要介绍了Qt怎样实现通用视频控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在之前做的视频监控系统中,根据不同的用
千家信息网最后更新 2025年02月13日Qt怎样实现通用视频控件
这篇文章主要介绍了Qt怎样实现通用视频控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
一、前言
在之前做的视频监控系统中,根据不同的用户需要,做了好多种视频监控内核,有ffmpeg内核的,有vlc内核的,有mpv内核的,还有海康sdk内核的,为了做成通用的功能,不同内核很方便的切换,比如pro直接改一个DEFINE的变量名,所以需要将各种内核的使用方法做成一样的接口,这样看起来就很整齐,所以后面特意提炼了一个通用的视频控件,该控件没有具体的视频播放控制功能,需要根据不同的内核去调用具体的方法实现,后面还需要增加大华sdk或者其他第三方厂家的协议的时候,直接套用这个通用视频控件即可。
通用视频控件功能:
可设置边框大小
可设置边框颜色
可设置两路OSD标签
可设置是否绘制OSD标签
可设置标签文本或图片
可设置OSD位置 左上角+左下角+右上角+右下角
可设置OSD风格 文本+日期+时间+日期时间+图片
自定义半透明悬浮窗体,一排按钮
悬浮按钮可自定义设置,包括背景颜色+按下颜色
发送信号通知单击了哪个悬浮按钮
能够识别拖进来的文件,通知url
提供open close pause等接口
二、代码思路
//设置悬浮条//顶部工具栏,默认隐藏,鼠标移入显示移除隐藏flowPanel = new QWidget(this);flowPanel->setObjectName("flowPanel");flowPanel->setVisible(false);//用布局顶住,左侧弹簧QHBoxLayout *layout = new QHBoxLayout;layout->setSpacing(2);layout->setMargin(0);layout->addStretch();flowPanel->setLayout(layout);//按钮集合名称,如果需要新增按钮则在这里增加即可QListbtns;btns << "btnFlowVideo" << "btnFlowSnap" << "btnFlowSound" << "btnFlowAlarm" << "btnFlowClose";void VideoWidget::resizeEvent(QResizeEvent *){ //重新设置顶部工具栏的位置和宽高,可以自行设置顶部显示或者底部显示 int height = 20; flowPanel->setGeometry(borderWidth, borderWidth, this->width() - (borderWidth * 2), height); //flowPanel->setGeometry(borderWidth, this->height() - height - borderWidth, this->width() - (borderWidth * 2), height);}void VideoWidget::enterEvent(QEvent *){ //这里还可以增加一个判断,是否获取了焦点的才需要显示 //if (this->hasFocus()) {} if (flowEnable) { flowPanel->setVisible(true); }}void VideoWidget::leaveEvent(QEvent *){ if (flowEnable) { flowPanel->setVisible(false); }}//支持拖曳识别void VideoWidget::dropEvent(QDropEvent *event){ //拖放完毕鼠标松开的时候执行 //判断拖放进来的类型,取出文件,进行播放 if(event->mimeData()->hasUrls()) { QString url = event->mimeData()->urls().first().toLocalFile(); this->close(); this->setUrl(url); this->open(); emit fileDrag(url); } else if (event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { QTreeWidget *treeWidget = (QTreeWidget *)event->source(); if (treeWidget != 0) { QString url = treeWidget->currentItem()->data(0, Qt::UserRole).toString(); this->close(); this->setUrl(url); this->open(); emit fileDrag(url); } }}void VideoWidget::dragEnterEvent(QDragEnterEvent *event){ //拖曳进来的时候先判断下类型,非法类型则不处理 if(event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) { event->setDropAction(Qt::CopyAction); event->accept(); } else if(event->mimeData()->hasFormat("text/uri-list")) { event->setDropAction(Qt::LinkAction); event->accept(); } else { event->ignore(); }}
三、效果图
感谢你能够认真阅读完这篇文章,希望小编分享的"Qt怎样实现通用视频控件"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
视频
内核
控件
可设
按钮
篇文章
不同
功能
时候
标签
类型
颜色
图片
接口
文件
文本
方法
日期
时间
边框
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
地下城与勇士登录不显示服务器
大学生数据库应用中心
smtp 邮箱服务器
酒店的网络安全
德国的网络安全
数据库 前景
远程连接阿里云数据库
软件开发ppt模板免费
中专学网络安全的有哪些学校
网络安全小组活动
服务器自动屏蔽ip防护软件
关闭服务器80端口会有什么影响
网络信息防御和网络安全技术
查询数据库成绩小于80的人
暗黑2线上模式无法连接服务器
新乡网络安全宣传周
如何查看服务器硬盘工作时间
知名的重庆移动服务器托管物理机
南昌app软件开发报价
服务器故事视频大全
数据库字符集怎么查oracle
路由器创建vpn服务器
中文科技期刊数据库 核实
网络安全横向扫描检测
金融业与数据库技术
新基建网络安全技术大赛
共享雨伞系统软件开发公司
镇江扫爆服务器
宁夏自然资源厅网络安全培训
软件开发问题有偿