112 lines
2.3 KiB
C++
112 lines
2.3 KiB
C++
#ifndef TABLEOVERLAYWIDGET_H
|
|
#define TABLEOVERLAYWIDGET_H
|
|
|
|
#include <QWidget>
|
|
#include <QVBoxLayout>
|
|
#include <QHBoxLayout>
|
|
#include <QPushButton>
|
|
#include <QStackedWidget>
|
|
#include <QMap>
|
|
#include <QScrollArea>
|
|
#include <QLabel>
|
|
#include "../procedure/proceduredata.h"
|
|
|
|
/**
|
|
* @class TableOverlayWidget
|
|
* @brief 表格浮层组件
|
|
*
|
|
* 在页面上显示浮层,支持多个表格的标签页切换
|
|
* 特点:
|
|
* - 浮层形式,不阻塞主界面
|
|
* - 左侧垂直标签页导航
|
|
* - 可关闭
|
|
*/
|
|
class TableOverlayWidget : public QWidget
|
|
{
|
|
Q_OBJECT
|
|
|
|
public:
|
|
explicit TableOverlayWidget(QWidget *parent = nullptr);
|
|
|
|
/**
|
|
* @brief 添加表格到浮层
|
|
* @param tableId 表格ID
|
|
* @param tableName 表格名称
|
|
* @param tableWidget 表格组件
|
|
*/
|
|
void addTable(const QString &tableId, const QString &tableName, QWidget *tableWidget);
|
|
|
|
/**
|
|
* @brief 显示特定表格
|
|
* @param tableId 表格ID
|
|
*/
|
|
void showTable(const QString &tableId);
|
|
|
|
/**
|
|
* @brief 移除表格
|
|
* @param tableId 表格ID
|
|
*/
|
|
void removeTable(const QString &tableId);
|
|
|
|
/**
|
|
* @brief 清除所有表格
|
|
*/
|
|
void clearTables();
|
|
|
|
/**
|
|
* @brief 显示浮层
|
|
*/
|
|
void showOverlay();
|
|
|
|
/**
|
|
* @brief 隐藏浮层
|
|
*/
|
|
void hideOverlay();
|
|
|
|
/**
|
|
* @brief 切换浮层显示状态
|
|
*/
|
|
void toggleOverlay();
|
|
|
|
/**
|
|
* @brief 是否显示
|
|
*/
|
|
bool isOverlayVisible() const { return m_isVisible; }
|
|
|
|
signals:
|
|
void closed();
|
|
void tableChanged(const QString &tableId);
|
|
|
|
private slots:
|
|
void onTabButtonClicked();
|
|
void onCloseButtonClicked();
|
|
|
|
private:
|
|
void setupUI();
|
|
void updateTabButtons();
|
|
void animateShow();
|
|
void animateHide();
|
|
|
|
struct TableTab
|
|
{
|
|
QString id;
|
|
QString name;
|
|
QWidget *widget;
|
|
QPushButton *tabButton;
|
|
};
|
|
|
|
QWidget *m_container; // 浮层容器
|
|
QScrollArea *m_tabScrollArea; // 标签栏滚动区域
|
|
QWidget *m_tabBar; // 标签栏容器
|
|
QVBoxLayout *m_tabLayout; // 标签栏布局
|
|
QStackedWidget *m_contentStack; // 内容堆栈
|
|
QPushButton *m_closeBtn; // 关闭按钮
|
|
QLabel *m_titleLabel; // 标题标签
|
|
|
|
QMap<QString, TableTab> m_tables; // 表格映射
|
|
QString m_currentTableId; // 当前显示的表格ID
|
|
bool m_isVisible; // 是否可见
|
|
};
|
|
|
|
#endif // TABLEOVERLAYWIDGET_H
|