qt_demoe/video/videopanel/videobox.h

132 lines
3.7 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#ifndef VIDEOBOX_H
#define VIDEOBOX_H
/**
* 监控画面切换控件 作者:feiyangqingyun(QQ:517216493) 2021-11-08
* 1. 将所有通道切换处理全部集中到一个类。
* 2. 通用整数倍数布局切换函数比如4x4/5x5可方便拓展到100/255通道等。
* 3. 通用行列数量布局切换函数比如1x4/4x2可方便拓展各种axb行列数。
* 4. 通用特殊异形布局切换函数,可以参考进行自定义异形布局。
* 5. 提供添加行列数布局函数。
* 6. 通道布局切换发出信号通知。
* 7. 可控每种布局切换菜单是否启用。
* 8. 支持自定义子菜单布局内容。
* 9. 支持设置对应的菜单标识比如默认的通道字样改成设备。
*/
#include <QObject>
#include <QWidget>
#include <QMap>
class QMenu;
class QWidget;
class QGridLayout;
#ifdef quc
class Q_DECL_EXPORT VideoBox : public QObject
#else
class VideoBox : public QObject
#endif
{
Q_OBJECT
public:
explicit VideoBox(QObject *parent = 0);
private:
//最大通道数量
int maxCount;
//当前布局类型
QString layoutType;
//表格布局存放通道
QGridLayout *gridLayout;
//视频控件集合
QWidgetList widgets;
//主菜单子菜单文字标识
QString menuFlag;
QString actionFlag;
//可以控制每个子菜单是否可见
QList<bool> visibles;
//布局方案标识集合
QMap<QString, QStringList> types;
void addMenu(QMenu *menu, const QString &type);
private:
//常规及异形通道布局
void change_layout_normal(int index, int row, int column);
void change_layout_custom(int index, int type);
//设置可见
void change_layout_visible(int start, int end);
//异形布局(l表示右侧底部环绕布局/o表示上下左右环绕布局)
void change_layout_l(const QList<int> &indexs);
void change_layout_o(const QList<int> &indexs);
public:
//获取和设置当前布局类型
QString getLayoutType() const;
void setLayoutType(const QString &layoutType);
//获取和设置视频控件集合
QWidgetList getWidgets() const;
void setWidgets(QWidgetList widgets);
//设置表格布局
void setLayout(QGridLayout *gridLayout);
//设置主菜单子菜单文字标识
void setMenuFlag(const QString &menuFlag);
void setActionFlag(const QString &actionFlag);
//设置子菜单可见
void setVisibles(const QList<bool> &visibles);
//添加行列布局(必须在initMenu前调用)
void appendType(int index, int row, int column);
//初始化菜单
void initMenu(QMenu *menu);
public Q_SLOTS:
//显示和隐藏所有通道
void show_all();
void hide_all();
//菜单切换布局槽函数
void change_layout();
void change_layout(int type, int index);
//自定义布局通道切换函数
void change_layout_y_1_2(int index);
void change_layout_y_1_3(int index);
void change_layout_y_1_5(int index);
void change_layout_y_1_8(int index);
void change_layout_y_1_9(int index);
void change_layout_y_1_10(int index);
void change_layout_y_1_12(int index);
void change_layout_y_1_16(int index);
//常规布局通道切换函数
void change_layout_1(int index);
void change_layout_4(int index);
void change_layout_6(int index);
void change_layout_8(int index);
void change_layout_9(int index);
void change_layout_13(int index);
void change_layout_16(int index);
void change_layout_25(int index);
void change_layout_36(int index);
void change_layout_64(int index);
Q_SIGNALS:
//画面布局切换信号
void changeLayout(int type, const QString &layoutType, bool max);
};
#endif // VIDEOBOX_H