Qt怎样实现通用视频控件
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了Qt怎样实现通用视频控件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、前言在之前做的视频监控系统中,根据不同的用
千家信息网最后更新 2026年11月04日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);//按钮集合名称,如果需要新增按钮则在这里增加即可QList btns;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安全错误
数据库的锁怎样保障安全
广州万易互联网科技有限公司
河南云网互联网络科技有限公司
高科技互联网
重庆互联网络科技
北京互联网科技公司
深圳互联网络科技有限公司
万易互联网科技有限公司
卓越科技(互联网 )
广州善班互联网科技
互联网科技公司有哪些
上海卓越科技 互联网
衡水科技产业互联网平台
上海宁丞科技互联网
阿大互联网科技有限公司
互联网新科技动漫ppt素材
产业互联网科技服务公司
昆明中奇联合互联网科技
陕西九四连强互联网科技有限公司
同城互联网络科技
互联网金融金融科技
新华互联网科技
A股互联网金融科技公司
广州互联网科技公司
腾讯科技 互联网女皇
甘肃拓世互联网科技有限公司
华中科技有哪些互联网大佬
金融科技与互联网金融相同和不同
互联网科技如何创业
全球科技与互联网公司市值变化
唐山双旺合互联网科技产业园