基于QT的多线程视频监控的实现(二)
来源:互联网 发布:php手机租车网站源码 编辑:程序博客网 时间:2024/06/06 22:13
二丶接着上一节,这节主要讲,多屏分割,多屏相互切换
视频监控很重要的一个环节就是多屏切换了,这里主要实现的是 1,2,4,8,16,32,64 分屏的相互切换,最多是64分屏。
(1)QT 常用到的布局类有:QHBoxLayout、QVBoxLayout、QGridLayout三种,分别是水平排列布局、垂直排
列布局、表格排列布局。常用的方法有addWidget()和addLayout()。addWidget()用于在布局中插入控件,addLayout()
用于在布局中插入子布局。在布局管理中还常用到setMargin()用于设定边距,setSpacing()用于设定控件间距。
(2) 整体而言,在这个多分屏中,只要点击其中的一个屏幕,点击的屏幕便会覆盖整个屏幕然后再次双击,便能够
复原。
(3)具体直接看效果图和代码:
一分屏
二分屏,有点不好看,凑合着
二分屏,其中一个双击放大
四分屏。下面不一一展示其双击放大图
八分屏,双击有点小bug,不能完全覆盖
十六分屏
32分屏
64分屏
以上是分屏的效果图,详细代码如下:
cwskcontrolwin.h代码如下
#ifndef CWSKCONTROLWIN_H#define CWSKCONTROLWIN_H#include <QWidget>#include <QFrame>#include <QDebug>#include <QTimer>#include <QMouseEvent>class CWskControlWin : public QFrame{ Q_OBJECTpublic: explicit CWskControlWin(QWidget *parent = 0); bool GetIsShow(){return m_bShow;} void SetIsShow(bool bShow = false){ m_bShow = bShow;}protected: void mouseDoubleClickEvent(QMouseEvent *);signals:public slots:private: bool m_bShow;};#endif // CWSKCONTROLWIN_H
#include "cwskcontrolwin.h"#include <QPainter>CWskControlWin::CWskControlWin(QWidget *parent) : QFrame(parent){ m_bShow = false; this->setStyleSheet("QFrame{ border: 1px solid #0000CD;}");//蓝色}void CWskControlWin::mouseDoubleClickEvent(QMouseEvent *){ qDebug() << "is double click ... " << this->winId(); m_bShow = !m_bShow;}
widget.h 代码如下:
#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QGridLayout>#include <QTimer>#include "cwskcontrolwin.h"#define WND_MAX_NUM 64namespace Ui {class Widget;}class Widget : public QWidget{ Q_OBJECTpublic: explicit Widget(QWidget *parent = 0); ~Widget(); enum ChildState{NO_WND = 0,ONE_WND,TWO_WND,FOUR_WND,EIGHT_WND,SIXTEEN_WND,THIRTY_TWO_WND,SIXTY_FOUR_WND}; void SetAllShowToFalse();public slots: void UpdateShowWnd(); void changeWidgetCount(int);private: Ui::Widget *ui; int m_nNum; std::vector<QGridLayout *> m_vecNLayout; std::vector<CWskControlWin *> playViews; CWskControlWin * getView(uint num); void setPlayScreenLayout(ChildState state, int start); QTimer m_timer; ChildState m_nCurrentState; int m_nLayoutStart;};#endif // WIDGET_H
main.cpp代码如下:
#include "widget.h"#include <QApplication>int main(int argc, char *argv[]){ QApplication a(argc, argv); Widget w; w.show(); return a.exec();}
代码下载地址:点击打开链接
阅读全文
0 0
- 基于QT的多线程视频监控的实现(二)
- 基于QT的多线程视频监控的实现(一)
- 基于安卓平台,客户端视频监控的实现(二)
- QT: 基于QT和嵌入式的视频监控系统
- 基于qt和opencv的远程视频监控与播放
- 基于qt的多线程视频采集与传输
- 基于v4l2的视频监控
- QT 支持多客户端网络视频监控的实现
- 基于AVI的网络视频监控存储系统的实现方法
- 基于ARM的视频监控终端的设计与实现
- 基于AVI的网络视频监控存储系统的实现方法
- 基于ARM的视频监控系统的设计与实现
- 基于Android的视频监控系统设计与实现
- 基于MFC的视频监控系统客户端实现 ---项目经验
- 基于Qt的视频播放器的设计与实现
- 基于安卓平台,客户端视频监控的实现(一)
- 基于安卓平台,客户端视频监控的实现(三)
- 基于Qt的组态监控软件实现以及分析(转)
- <Qt> QWidget派生类setStyleSheet方法无效问题
- 51nod 1089 最长回文子串 V2(Manacher算法)
- LintCode 3.统计数字
- <26>——Remove Duplicates from Sorted Array
- 跨域--window.name + iframe
- 基于QT的多线程视频监控的实现(二)
- ES6 函数扩展
- Redis常用命令
- 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回
- LvClass 的一个效率
- out内置对象
- 转成Json格式
- 事务及传播行为
- ROS中URDF文件详解(重点讲解mesh属性)