基於QT的多執行緒視訊監控的實現(二)
阿新 • • 發佈:2018-12-31
二丶接著上一節,這節主要講,多屏分割,多屏相互切換
視訊監控很重要的一個環節就是多屏切換了,這裡主要實現的是 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程式碼如下
cwskcontrolwin.cpp程式碼如下#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
下一篇