1. 程式人生 > >基於QT的多執行緒視訊監控的實現(二)

基於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
cwskcontrolwin.cpp程式碼如下
#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
下一篇