Qt开源作品6-通用视频控件
一、前言
在之前做的视频监控系统中,根据不同的用户需要,做了好多种视频监控内核,有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<QString> 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();
}
}
三、效果图

四、开源主页
- 以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。
- 本开源项目已经成功升级到V2.0版本,分门别类,图文并茂,保你爽到爆。
- Qt开源武林秘籍开发经验,看完学完,20K起薪,没有找我!
- 国内站点:https://gitee.com/feiyangqingyun/QWidgetDemo
- 国际站点:https://github.com/feiyangqingyun/QWidgetDemo
- 开源秘籍:https://gitee.com/feiyangqingyun/qtkaifajingyan
- 个人主页:https://qtchina.blog.csdn.net/
- 知乎主页:https://www.zhihu.com/people/feiyangqingyun/
Qt开源作品6-通用视频控件的更多相关文章
- Redrain 通用菜单控件使用方法和说明(附源码和demo)
转载请说明原出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42889709 大概半年前我写过博客说明怎么改造duilib的原代Menu ...
- cocos2d-x视频控件VideoPlayer的用户操作栏进度条去除(转载)
目前遇到两个问题: (1)视频控件移除有问题,会报异常. (2)视频控件有用户操作栏,用户点击屏幕会停止视频播放. 对于第一个问题,主要是移除控件时冲突引起的,目前简单处理是做一个延时处理,先stop ...
- 可以创建专业的客户端/服务器视频会议应用程序的音频和视频控件LEADTOOLS Video Conferencing SDK
LEADTOOLS Video Streaming Module控件为您创建一个自定义的视频会议应用程序和工具提供所有需要的功能.软件开发人员可以使用Video Streaming Module SD ...
- 在Qt中使用AnyCAD三维建模控件
AnyCAD C++ SDK专为Qt框架增加了AnyPlatformQt.lib模块,在Qt中使用AnyCAD三维建模控件变得十分简单. 下载 Qt高速下载:http://pan.baidu.com/ ...
- android--------自定义视频控件(视频全屏竖屏自动切换)
android播放视频也是常用的技术,今天分享一个自定义视频控件,支持自定义控制 UI,全屏播放, 可以实现自动横竖屏切换的控件,跟随手机的位置而,重力感应自动切换横竖屏. 效果图: 代码下载Gi ...
- h5 的video视频控件
h5 的video视频控件 由于html5的流行,其中的video视频的使用很流行,使得可恨的IE9也能与时俱进了. video所支持的格式有mp4.ogg和wav三种. 例: HTML5 Video ...
- H5 video自定义视频控件
1.自定义效果截图 2.效果源码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"& ...
- Qt编写自定义控件31-面板仪表盘控件
一.前言 在Qt自定义控件中,仪表盘控件是数量最多的,写仪表盘都写到快要吐血,可能是因为各种工业控制领域用的比较多吧,而且仪表盘又是比较生动直观的,这次看到百度的echart中有这个控件,所以也来模仿 ...
- 关于intouch/ifix嵌入视频控件并使用(海康,大华)
2017年下半年项目开始接触利用intouch工控软件来进行项目二次开发.其中关于驱动的问题始终是上位机的重中之重,暂且不表(嘿嘿--),首先遇到的问题就是在弹窗中嵌入视频控件,监控设备的开停状态.经 ...
- Qt编写自定义控件35-GIF录屏控件
一.前言 在平时的写作过程中,经常需要将一些操作动作和效果图截图成gif格式,使得涵盖的信息更全面更生动,有时候可以将整个操作过程和运行效果录制成MP4,但是文件体积比较大,而且很多网站不便于上传,基 ...
随机推荐
- 数据分析(matplotlib pyplot)
文章目录 1.导入pyplot 库 2.绘出直线图 3.绘出实心点 4.绘出折线图 5.绘制正余弦函数 Pyplot 是 Matplotlib 的子库,提供了和 MATLAB 类似的绘图 API. P ...
- ubuntu16.04安装mmdetection库
一,前言 1.1,更新 pip 和 conda下载源 1.2,查看 conda 和 pip 版本 二,MMDetection 简介 三,MMDetection 安装 3.1,依赖环境 3.2,安装过程 ...
- springboot:调用接口返回的数据乱码解决
从git拉下来项目后,运行服务,启动正常,但是使用swagger和postman调用服务接口出现乱码问题 每一个接口返回的数据是乱码,但是控制台打印的日志都是正常的,后续发现数据的返回类型不是常见的a ...
- CMake 生成器表达式---条件表达式和逻辑运算符
[写在前面] CMake 的生成器表达式用于在构建系统级别上进行条件判断和逻辑运算,它们通常用在目标属性和生成器表达式上下文中.这些表达式允许你根据不同的平台.配置或编译器来定制构建过程. 本文引用的 ...
- Python--json_tools用法
安装 pip install json_tools 使用 输出导读: 上面的输出显示的是b相对于a的变化: 1) b和a都有键'rd',但是b相对a键'rd'的值发生了变化,由原来的yanan变为Ya ...
- 13-2 c++拷贝控制和资源管理
目录 13.2.1 行为像值的类 类拷贝赋值运算符的编写 13.2.2 定义行为像指针的类 引用计数 定义一个使用引用计数的类 为了定义这些成员,我们首先必须确定此类型对象的拷贝语义.一般来说,有两种 ...
- Linux Shell_read
介绍 从控制台输入 基本语法 read [选项] 参数 常用选项 |选项|功能| |-|-| |-p|指定读取值时的提示符| |-t|指定取值时等待的时间(秒),如果没有在指定时间输入,就不再等待了| ...
- .NetCore+Mysql+Vue+MVC+SqlSugar开源WMS仓库管理系统
今天给大家推荐一个开源免费WMS仓库管理系统.仓库管理系统,可以有效控制并跟踪仓库业务的物流和成本管理全过程,实现或完善企业的仓储信息管理. 项目功能列表 基础数据 系统设置 物料管理 客户管理 供应 ...
- QT 6.8 安卓 Android 环境安装配置,你踩了几个坑,我教你跳出来,早看不入坑… …
安装了QT6.8 最新版本,在线安装,用了数天后,想开始写一个Android程序,发现还在配置环境才可以继续,于是就开始配置: 菜单:编辑 -->preferences-->设备--> ...
- win10中Docker安装、构建镜像、创建容器、Vscode连接实例
Docker方便一键构建项目所需的运行环境:首先构建镜像(Image).然后镜像实例化成为容器(Container),构成项目的运行环境.最后Vscode连接容器,方便我们在本地进行开发.下面以一个简 ...