上一篇《 基于QT的多线程视频监控的实现(一)》
二丶接着上一节,这节主要讲,多屏分割,多屏相互切换
视频监控很重要的一个环节就是多屏切换了,这里主要实现的是 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_OBJECT
public:
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 64
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
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();
}
代码下载地址: 点击打开链接
欢迎大家加我的群:
460952208
下一篇
《基于QT的多线程视频监控的实现(三)----摄像头数据的采集与显示》