qt layout 颜色_Qt开源作品6-通用视频控件

## 一、前言

在之前做的视频监控系统中,根据不同的用户需要,做了好多种视频监控内核,有ffmpeg内核的,有vlc内核的,有mpv内核的,还有海康sdk内核的,为了做成通用的功能,不同内核很方便的切换,比如pro直接改一个DEFINE的变量名,所以需要将各种内核的使用方法做成一样的接口,这样看起来就很整齐,所以后面特意提炼了一个通用的视频控件,该控件没有具体的视频播放控制功能,需要根据不同的内核去调用具体的方法实现,后面还需要增加大华sdk或者其他第三方厂家的协议的时候,直接套用这个通用视频控件即可。

通用视频控件功能:

1. 可设置边框大小

2. 可设置边框颜色

3. 可设置两路OSD标签

4. 可设置是否绘制OSD标签

5. 可设置标签文本或图片

6. 可设置OSD位置 左上角+左下角+右上角+右下角

7. 可设置OSD风格 文本+日期+时间+日期时间+图片

8. 自定义半透明悬浮窗体,一排按钮

9. 悬浮按钮可自定义设置,包括背景颜色+按下颜色

10. 发送信号通知单击了哪个悬浮按钮

11. 能够识别拖进来的文件,通知url

12. 提供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();    }}

## 三、效果图

b8d685c42888944434f92bd76704c097.gif

## 四、开源主页

**以上作品完整源码下载都在开源主页,会持续不断更新作品数量和质量,欢迎各位关注。**

1. 国内站点:[https://gitee.com/feiyangqingyun/QWidgetDemo](https://gitee.com/feiyangqingyun/QWidgetDemo)

2. 国际站点:[https://github.com/feiyangqingyun/QWidgetDemo](https://github.com/feiyangqingyun/QWidgetDemo)

3. 个人主页:[https://blog.csdn.net/feiyangqingyun](https://blog.csdn.net/feiyangqingyun)

4. 知乎主页:[https://www.zhihu.com/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值