首页| 论坛| 消息
主题:QT开发之旅五视频监管平台(开源)
liudianwu发表于 2014-12-27 16:53
忙忙碌碌又是一年,算算自己毕业四年半,一直在现在这家公司做研发外加总经理助理,研发起初用的VB.NET,而后全面转为C#,最后又全面转为QT,都是由于项目需要,算下来自己搞QT编程也已经四年了,2010年开始接触QT并编写一些公司需要的辅助工具,其实在公司绝大部分时间在干杂七杂八的事情,例如采购、人事、招投标、现场技术支持等,一年下来大概只有不到三分之一的时间在钻研程序,其中这三分之一的时间晚上占了一大半,其实搞程序的,我感觉绝大部分都是出于本身兴趣爱好,然后持之以恒的钻研,不断成长和进步。
用QT陆续写过几个商业项目以及公司内部硬件通信需要的一些辅助设置工具,其中以报警视频联动管理平台为主,从2010年的C#版本开始编写,陆续完善积累到2014年的稳定版,花了相当多的精力去完善,不断查看同行的相关软件功能,吸取优秀的功能,摒弃无用的功能,用易用简洁全完善每一个细节。
今天要分享的是给某区安全管理中心编写的视频监管平台,稍后会放出QT4-QT5各版本可完整编译运行的源码。
按照习惯,首先上一张主界面截图:
XP下运行截图:

Win7下运行截图:

Ubuntu下运行截图:

整个系统在开始架构的时候,本人都是写在草稿纸上的,包括布局,功能点,需要注意的处理等方面,现在要重新一一仔细写出来,还真不容易,这里就说个大概,然后将其中的部分功能处理用代码描述。
项目需求:某区下面有几百所学校,每个学校都有若干台NVR或者DVR,每台NVR和DVR都挂接着N个IPC(摄像机)(包括网络摄像机和模拟摄像机),现在需要对所有学校的监控进行查看以及回放和轮询,能够对指定学校进行视频监控,对所有学校的视重点部位视频进行查看轮询,可自定义轮询时间等。
开发过程:本着尽量追求简洁的要求,最终编写了如上图的主界面。没有采用QT自带的界面,而是重写了界面,自定义无边框拖动,自由换肤,全部采用QSS控制,本人从官网http://qt-project.org/doc/qt-4.8/stylesheet-examples.html彻底学习了下QSS的规则,整理了一套通用的换肤方案。

功能点罗列:
1:只限定一个实例处理。

视频监管平台是一个独占视频通道资源的系统,不能运行多个实例在同一台电脑上运行,所以在main函数中就限制了一个实例运行。
//创建共享内存,判断是否已经运行程序
QSharedMemory mem("VM");
if (!mem.create(1)) {
myHelper::ShowMessageBoxError("程序已运行,软件将自动关闭!");
return 1;
}
其中VM为自定义的名称,return 1表示退出程序返回1给操作系统。

2:F1键进入全屏模式,Esc键退出全屏模式。
几乎所有的视频监控系统,主界面都支持全屏显示及esc退出全屏,在QT中我是这样实现的,重写了主界面的keyPressEvent事件,拦截按键消息,判断对应按键,调用全屏及普通模式的方法。

void frmMain::keyPressEvent(QKeyEvent *event)
{
//空格键进入全屏,esc键退出全屏
switch(event->key()) {
case Qt::Key_F1:
screen_full();
break;
case Qt::Key_Escape:
screen_normal();
break;
default:
QDialog::keyPressEvent(event);
break;
}
}

void frmMain::screen_full()
{
this->setGeometry(qApp->desktop()->geometry());
this->layout()->setContentsMargins(0, 0, 0, 0);
ui->widget_main->layout()->setContentsMargins(0, 0, 0, 0);
ui->widget_title->setVisible(false);
ui->treeMain->setVisible(false);
}

void frmMain::screen_normal()
{
this->setGeometry(qApp->desktop()->availableGeometry());
this->layout()->setContentsMargins(1, 1, 1, 1);
ui->widget_main->layout()->setContentsMargins(5, 5, 5, 5);
ui->widget_title->setVisible(true);
ui->treeMain->setVisible(true);
}

3:支持QT4到QT5各个版本编译运行。
之前放出过N个工具及一个安防报警管理系统的源码,有兴趣的可以点击这里查看:http://www.qtcn.org/bbs/read-htm-tid-56372.html,很多兄弟反应不能在QT5上编译通过,甚是操蛋。本人一直喜欢用QT4.7,两个原因,一个是项目需要,程序主要在ARM上面跑,觉得部分公司提供的硬件开发板核心板都是自带的QT4.7版本的运行库,其他版本编译的程序无法在4.7运行库下运行。一个是QT4.7版本很经典,在windows上打包只需要附带几个DLL即可,打包压缩下一般才七八兆,很小,方便。到现在的QT5.4,我擦,光插件库就需要130MB,我勒个去,这还让用户的电脑怎么活啊!
本项目并木有牵扯到windows.h头文件,连修改系统时间的方法都改用了通用的系统命令,所以只要稍微更改部分地方即可,我代码中用的是:
#if (QT_VERSION > QT_VERSION_CHECK(5,0,0))
#i

浏览大图

浏览大图

浏览大图

浏览大图

浏览大图
下一页 (1/6)
回帖(98):
98楼:好贴,可惜排版有点难受
97楼:初学者路过,向大佬学习。
96楼:刚入坑安防领域,没有源码也能借鉴借鉴思路。

全部回帖(98)»
最新回帖
收藏本帖
发新帖