其实qt应用在安防领域还是蛮多的,尤其是视频监控系统,但是网上几乎没有看到qt做的最基础的视频监控画面分割的demo,今天特意花几分钟提取出来,开源放出来。欢迎大家多多点赞!源码下载:点击打开链接

完整代码:

#ifndef FRMMAIN_H
#define FRMMAIN_H#include <QtGui>
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
#include <QtWidgets>
#endifnamespace Ui
{
class frmMain;
}class frmMain : public QWidget
{Q_OBJECTpublic:explicit frmMain(QWidget *parent = 0);~frmMain();protected:bool eventFilter(QObject *watched, QEvent *event);private:Ui::frmMain *ui;bool videoMax;int videoCount;QString videoType;QMenu *videoMenu;QList<QLabel *> widgets;private slots:void initForm();void initMenu();private slots:void play_video_all();void snapshot_video_one();void snapshot_video_all();void show_video_all();void show_video_4();void show_video_6();void show_video_8();void show_video_9();void show_video_16();void hide_video_all();void change_video(int index, int flag);void change_video_4(int index);void change_video_6(int index);void change_video_8(int index);void change_video_9(int index);void change_video_16(int index);
};#endif // FRMMAIN_H
#include "frmmain.h"
#include "ui_frmmain.h"#pragma execution_character_set("utf-8")frmMain::frmMain(QWidget *parent) :QWidget(parent),ui(new Ui::frmMain)
{ui->setupUi(this);this->initForm();this->initMenu();this->show_video_all();QTimer::singleShot(1000, this, SLOT(play_video_all()));
}frmMain::~frmMain()
{delete ui;
}bool frmMain::eventFilter(QObject *watched, QEvent *event)
{if (event->type() == QEvent::MouseButtonDblClick) {QLabel *widget = (QLabel *) watched;if (!videoMax) {videoMax = true;hide_video_all();ui->gridLayout->addWidget(widget, 0, 0);widget->setVisible(true);} else {videoMax = false;show_video_all();}} else if (event->type() == QEvent::MouseButtonPress) {if (qApp->mouseButtons() == Qt::RightButton) {videoMenu->exec(QCursor::pos());}}return QWidget::eventFilter(watched, event);
}void frmMain::initForm()
{//设置样式表QStringList qss;qss.append("QFrame{border:2px solid #000000;}");qss.append("QLabel{font:75 25px;color:#F0F0F0;border:2px solid #AAAAAA;background:#000000;}");qss.append("QLabel:focus{border:2px solid #00BB9E;background:#555555;}");ui->frame->setStyleSheet(qss.join(""));videoMax = false;videoCount = 16;videoType = "1_16";for (int i = 0; i < videoCount; i++) {QLabel *widget = new QLabel;widget->setObjectName(QString("video%1").arg(i + 1));widget->installEventFilter(this);widget->setFocusPolicy(Qt::StrongFocus);widget->setAlignment(Qt::AlignCenter);//二选一可以选择显示文字,也可以选择显示背景图片//widget->setText(QString("通道 %1").arg(i + 1));widget->setPixmap(QPixmap(":/bg_novideo.png"));widgets.append(widget);}
}void frmMain::initMenu()
{videoMenu = new QMenu(this);videoMenu->addAction("截图当前视频", this, SLOT(snapshot_video_one()));videoMenu->addAction("截图所有视频", this, SLOT(snapshot_video_all()));videoMenu->addSeparator();QMenu *menu4 = videoMenu->addMenu("切换到4画面");menu4->addAction("通道1-通道4", this, SLOT(show_video_4()));menu4->addAction("通道5-通道8", this, SLOT(show_video_4()));menu4->addAction("通道9-通道12", this, SLOT(show_video_4()));menu4->addAction("通道13-通道16", this, SLOT(show_video_4()));QMenu *menu6 = videoMenu->addMenu("切换到6画面");menu6->addAction("通道1-通道6", this, SLOT(show_video_6()));menu6->addAction("通道6-通道11", this, SLOT(show_video_6()));menu6->addAction("通道11-通道16", this, SLOT(show_video_6()));QMenu *menu8 = videoMenu->addMenu("切换到8画面");menu8->addAction("通道1-通道8", this, SLOT(show_video_8()));menu8->addAction("通道9-通道16", this, SLOT(show_video_8()));QMenu *menu9 = videoMenu->addMenu("切换到9画面");menu9->addAction("通道1-通道9", this, SLOT(show_video_9()));menu9->addAction("通道8-通道16", this, SLOT(show_video_9()));videoMenu->addAction("切换到16画面", this, SLOT(show_video_16()));
}void frmMain::play_video_all()
{}void frmMain::snapshot_video_one()
{}void frmMain::snapshot_video_all()
{}void frmMain::show_video_all()
{if (videoType == "1_4") {change_video_4(0);} else if (videoType == "5_8") {change_video_4(4);} else if (videoType == "9_12") {change_video_4(8);} else if (videoType == "13_16") {change_video_4(12);} else if (videoType == "1_6") {change_video_6(0);} else if (videoType == "6_11") {change_video_6(5);} else if (videoType == "11_16") {change_video_6(10);} else if (videoType == "1_8") {change_video_8(0);} else if (videoType == "9_16") {change_video_8(8);} else if (videoType == "1_9") {change_video_9(0);} else if (videoType == "8_16") {change_video_9(7);} else if (videoType == "1_16") {change_video_16(0);}
}void frmMain::show_video_4()
{videoMax = false;QString videoType;int index = 0;QAction *action = (QAction *)sender();QString name = action->text();if (name == "通道1-通道4") {index = 0;videoType = "1_4";} else if (name == "通道5-通道8") {index = 4;videoType = "5_8";} else if (name == "通道9-通道12") {index = 8;videoType = "9_12";} else if (name == "通道13-通道16") {index = 12;videoType = "13_16";}if (this->videoType != videoType) {this->videoType = videoType;change_video_4(index);}
}void frmMain::show_video_6()
{videoMax = false;QString videoType;int index = 0;QAction *action = (QAction *)sender();QString name = action->text();if (name == "通道1-通道6") {index = 0;videoType = "1_6";} else if (name == "通道6-通道11") {index = 5;videoType = "6_11";} else if (name == "通道11-通道16") {index = 10;videoType = "11_16";}if (this->videoType != videoType) {this->videoType = videoType;change_video_6(index);}
}void frmMain::show_video_8()
{videoMax = false;QString videoType;int index = 0;QAction *action = (QAction *)sender();QString name = action->text();if (name == "通道1-通道8") {index = 0;videoType = "1_8";} else if (name == "通道9-通道16") {index = 8;videoType = "9_16";}if (this->videoType != videoType) {this->videoType = videoType;change_video_8(index);}
}void frmMain::show_video_9()
{videoMax = false;QString videoType;int index = 0;QAction *action = (QAction *)sender();QString name = action->text();if (name == "通道1-通道9") {index = 0;videoType = "1_9";} else if (name == "通道8-通道16") {index = 7;videoType = "8_16";}if (this->videoType != videoType) {this->videoType = videoType;change_video_9(index);}
}void frmMain::show_video_16()
{videoMax = false;QString videoType;int index = 0;videoType = "1_16";if (this->videoType != videoType) {this->videoType = videoType;change_video_16(index);}
}void frmMain::hide_video_all()
{for (int i = 0; i < videoCount; i++) {ui->gridLayout->removeWidget(widgets.at(i));widgets.at(i)->setVisible(false);}
}void frmMain::change_video(int index, int flag)
{int count = 0;int row = 0;int column = 0;for (int i = 0; i < videoCount; i++) {if (i >= index) {ui->gridLayout->addWidget(widgets.at(i), row, column);widgets.at(i)->setVisible(true);count++;column++;if (column == flag) {row++;column = 0;}}if (count == (flag * flag)) {break;}}
}void frmMain::change_video_4(int index)
{hide_video_all();change_video(index, 2);
}void frmMain::change_video_6(int index)
{hide_video_all();if (index == 0) {ui->gridLayout->addWidget(widgets.at(0), 0, 0, 2, 2);ui->gridLayout->addWidget(widgets.at(1), 0, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(2), 1, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(3), 2, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(4), 2, 1, 1, 1);ui->gridLayout->addWidget(widgets.at(5), 2, 0, 1, 1);for (int i = 0; i < 6; i++) {widgets.at(i)->setVisible(true);}} else if (index == 5) {ui->gridLayout->addWidget(widgets.at(5), 0, 0, 2, 2);ui->gridLayout->addWidget(widgets.at(6), 0, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(7), 1, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(8), 2, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(9), 2, 1, 1, 1);ui->gridLayout->addWidget(widgets.at(10), 2, 0, 1, 1);for (int i = 5; i < 11; i++) {widgets.at(i)->setVisible(true);}} else if (index == 10) {ui->gridLayout->addWidget(widgets.at(10), 0, 0, 2, 2);ui->gridLayout->addWidget(widgets.at(11), 0, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(12), 1, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(13), 2, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(14), 2, 1, 1, 1);ui->gridLayout->addWidget(widgets.at(15), 2, 0, 1, 1);for (int i = 10; i < 16; i++) {widgets.at(i)->setVisible(true);}}
}void frmMain::change_video_8(int index)
{hide_video_all();if (index == 0) {ui->gridLayout->addWidget(widgets.at(0), 0, 0, 3, 3);ui->gridLayout->addWidget(widgets.at(1), 0, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(2), 1, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(3), 2, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(4), 3, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(5), 3, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(6), 3, 1, 1, 1);ui->gridLayout->addWidget(widgets.at(7), 3, 0, 1, 1);for (int i = 0; i < 8; i++) {widgets.at(i)->setVisible(true);}} else if (index == 8) {ui->gridLayout->addWidget(widgets.at(8), 0, 0, 3, 3);ui->gridLayout->addWidget(widgets.at(9), 0, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(10), 1, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(11), 2, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(12), 3, 3, 1, 1);ui->gridLayout->addWidget(widgets.at(13), 3, 2, 1, 1);ui->gridLayout->addWidget(widgets.at(14), 3, 1, 1, 1);ui->gridLayout->addWidget(widgets.at(15), 3, 0, 1, 1);for (int i = 8; i < 16; i++) {widgets.at(i)->setVisible(true);}}
}void frmMain::change_video_9(int index)
{hide_video_all();change_video(index, 3);
}void frmMain::change_video_16(int index)
{hide_video_all();change_video(index, 4);
}

Qt编写视频监控画面分割界面(开源)相关推荐

  1. Qt编写视频监控管理平台(支持海康/大华/宇视/华为/天地伟业/H264/H265等)

    一.前言 海康大华等厂家自己的客户端软件,基本上都是支持自家的设备,不支持其他家的摄像机和硬盘录像机,并不是因为技术上做不到,这些大厂要实现支持兼容其他的家的(他们家的服务端或者收费的都是支持其他家的 ...

  2. Qt编写视频监控系统70-OSD标签和图形信息(支持写入到文件)

    一.前言 作为一个完整的视频监控系统,用户还需要自定义一些OSD标签信息显示在对应通道上面,而且不止一个OSD标签信息,位置可以在四个角或者指定坐标显示.最开始本系统设计的时候,由于本人擅长的是pai ...

  3. Qt编写视频监控系统69-录像计划(支持64通道7*24录像设置)

    一.前言 录像计划这个功能一直挂了很久,之前做的也都有保存视频文件功能,其中还分了三大种,第一种是手动开启和停止录像:第二种是按照指定时长比如10s保存文件:第三种是定时30分钟一个文件一直保存.这三 ...

  4. Qt编写视频监控系统(移动侦测/遮挡报警/区域入侵/越界侦测/报警输入输出等)

    一.前言 得益于标准的onvif协议,各大监控厂商的设备都会支持onvif协议,在onvif协议中就包括了事件订阅机制,通过这个机制,可以拿到各种报警事件,比如移动侦测/遮挡报警/区域入侵/越界侦测/ ...

  5. Qt多路视频监控软件(Qt+VLC支持本地视频/RTSP流/RTMP流)

    Qt多路视频监控软件(Qt+VLC支持本地视频/RTSP流/RTMP流) 功能: 支持同时播放多路视频源: 支持播放本地视频,包括MP4.mkv.flv等视频格式: 支持播放RTSP/RTMP视频流: ...

  6. 嵌入式项目实战——基于QT的视频监控系统设计(二)

    嵌入式项目实战--基于QT的视频监控系统设计(二) 昨天我分享了关于QT的基本使用方法,掌握了这些基本的方法就可以设计一个简单的视频监控界面.下面我们开始分享完成这个嵌入式项目同样重要的知识点--UD ...

  7. 嵌入式项目实战——基于QT的视频监控系统设计(三)

    嵌入式项目实战--基于QT的视频监控系统设计(三) 进入到五一假期第三天,继续我们的项目.本来五一假期还是想好好休息一下的,因为最近学习的状态不太好,刷题都没有思路了,但是身边的同学太卷了,不过我还是 ...

  8. 嵌入式项目实战——基于QT的视频监控系统设计(四)

    嵌入式项目实战--基于QT的视频监控系统设计(四) 进入到五一假期的第四天,通过前三天的分享,相信你应该已经掌握了QT的基本使用.UDP网络编程.v4l2视频处理模块.多线程编程等基本的知识点.其实昨 ...

  9. 嵌入式项目实战——基于QT的视频监控系统设计(一)

    嵌入式项目实战--基于QT的视频监控系统设计(一) 这个五一因为疫情,只能待在家里,想了想不如将我之前做的一个小的嵌入式的练习项目分享出来,供入门嵌入式的同学们学习.基于QT的视频监控系统设计虽然是个 ...

最新文章

  1. 太赫兹芯片是什么原理_太赫兹波养生鞋 芯片、鞋垫和材质的详细了解专利技术~太赫兹芯...
  2. python爬虫原理-python爬虫原理详细讲解
  3. js中时间戳与日期格式的相互转换
  4. codeforces1485 F. Copy or Prefix Sum(dp)
  5. 基于java的络教学平台的设计与实现 (含源文件)
  6. MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)
  7. 博世 40 亿欧元押注自动驾驶,Waymo 准备接招吧
  8. YOLOv5:道路损伤检测
  9. mysql /!/_Mysql(一)
  10. Linux下查杀进程的方法说明
  11. 卓有成效的管理者(笔记)——有效的决策
  12. 用计算机发传真,用电脑怎么发传真
  13. 【论文学习:基于EEG/EMG/EOG的多模态人机接口,用于实时控制软机器人手】
  14. 【Python实用工具】暴力破解-1!Python编写四位数密码本
  15. 微信PC版Hook发送群艾特消息研究
  16. IM学习-认识即时通讯IM(一)
  17. 如何注册腾讯云账号(图文教程)?
  18. 昆石VOS3000_2.1.2.4安装脚本
  19. 【无人机】【2011】直升机无人机的最优控制
  20. 什么是类、什么是对象

热门文章

  1. 微信头像可以加挂件了,快试试
  2. java访问静态方法_JAVA:正确访问静态方法
  3. css预处理器——Less大全(看完不会切刁)
  4. OnCreate和OnInitDialog的区别
  5. C语言基础知识梳理<3>
  6. 编程小白学逻辑-实现王者荣耀轮盘中奖功能
  7. 7月30日科技联播:2018年全国电子竞技公开赛敲定:总决赛奖金89万 ,阿里安全的机器TimePlayer人很“变态”?...
  8. Win10安装Oracle19c,详细教程
  9. uniapp全网最简单实现夜间模式
  10. oracle手动切换scan监听,scan listener 重启