first commit
This commit is contained in:
200
widgets/tablewidgetfactory.h
Normal file
200
widgets/tablewidgetfactory.h
Normal file
@@ -0,0 +1,200 @@
|
||||
#ifndef TABLEWIDGETFACTORY_H
|
||||
#define TABLEWIDGETFACTORY_H
|
||||
|
||||
#include "../procedure/proceduredata.h"
|
||||
|
||||
#include <QDateTime>
|
||||
#include <QMap>
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QTableWidget>
|
||||
#include <QVariant>
|
||||
#include <QWidget>
|
||||
|
||||
/**
|
||||
* @class TableWidgetFactory
|
||||
* @brief 表格組件工廠類
|
||||
*
|
||||
* 根據 YAML 配置動態創建不同類型的表格組件:
|
||||
* - Grid 表格:數據矩陣(行列形式)
|
||||
* - Form 表格:表單字段佈局
|
||||
* - Series 表格:時序數據記錄
|
||||
*/
|
||||
class TableWidgetFactory : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit TableWidgetFactory(QObject *parent = nullptr);
|
||||
|
||||
/**
|
||||
* @brief 創建表格組件
|
||||
* @param tableDef 表格定義
|
||||
* @return 創建的表格組件
|
||||
*/
|
||||
QWidget *createTableWidget(const TableDefinition &tableDef);
|
||||
|
||||
// =====================================================
|
||||
// Form 表格數據訪問
|
||||
// =====================================================
|
||||
|
||||
/**
|
||||
* @brief 設置字段值
|
||||
* @param tableWidget 表格組件
|
||||
* @param fieldId 字段ID
|
||||
* @param value 值
|
||||
* @return 是否成功
|
||||
*/
|
||||
bool setFieldValue(QWidget *tableWidget, const QString &fieldId, const QVariant &value);
|
||||
|
||||
/**
|
||||
* @brief 獲取字段值
|
||||
* @param tableWidget 表格組件
|
||||
* @param fieldId 字段ID
|
||||
* @return 字段值
|
||||
*/
|
||||
QVariant getFieldValue(QWidget *tableWidget, const QString &fieldId) const;
|
||||
|
||||
// =====================================================
|
||||
// Grid 表格數據訪問
|
||||
// =====================================================
|
||||
|
||||
/**
|
||||
* @brief 設置單元格值
|
||||
* @param tableWidget 表格組件
|
||||
* @param rowId 行ID
|
||||
* @param columnId 列ID
|
||||
* @param value 值
|
||||
* @return 是否成功
|
||||
*/
|
||||
bool setCellValue(QWidget *tableWidget, const QString &rowId,
|
||||
const QString &columnId, const QVariant &value);
|
||||
|
||||
/**
|
||||
* @brief 獲取單元格值
|
||||
* @param tableWidget 表格組件
|
||||
* @param rowId 行ID
|
||||
* @param columnId 列ID
|
||||
* @return 單元格值
|
||||
*/
|
||||
QVariant getCellValue(QWidget *tableWidget, const QString &rowId,
|
||||
const QString &columnId) const;
|
||||
|
||||
// =====================================================
|
||||
// 通用方法
|
||||
// =====================================================
|
||||
|
||||
/**
|
||||
* @brief 獲取表格定義
|
||||
* @param tableWidget 表格組件
|
||||
* @return 表格定義
|
||||
*/
|
||||
TableDefinition getTableDefinition(QWidget *tableWidget) const;
|
||||
|
||||
/**
|
||||
* @brief 從引擎加載數據到表格
|
||||
* @param tableWidget 表格組件
|
||||
* @param tableRef 表格引用ID
|
||||
* @param engineData 引擎數據
|
||||
* @return 是否成功
|
||||
*/
|
||||
bool loadDataFromEngine(QWidget *tableWidget, const QString &tableRef,
|
||||
const QVariantMap &engineData);
|
||||
|
||||
// =====================================================
|
||||
// Series 表格特有方法
|
||||
// =====================================================
|
||||
|
||||
/**
|
||||
* @brief 添加時序數據點
|
||||
* @param tableWidget 表格組件
|
||||
* @param timestamp 時間戳
|
||||
* @param fieldValues 字段值映射
|
||||
* @return 是否成功
|
||||
*/
|
||||
bool addSeriesDataPoint(QWidget *tableWidget, const QDateTime ×tamp,
|
||||
const QVariantMap &fieldValues);
|
||||
|
||||
/**
|
||||
* @brief 清除時序數據
|
||||
* @param tableWidget 表格組件
|
||||
*/
|
||||
void clearSeriesData(QWidget *tableWidget);
|
||||
|
||||
// =====================================================
|
||||
// 驗證與控制
|
||||
// =====================================================
|
||||
|
||||
/**
|
||||
* @brief 驗證字段
|
||||
* @param tableWidget 表格組件
|
||||
* @param fieldId 字段ID
|
||||
* @return 是否有效
|
||||
*/
|
||||
bool validateField(QWidget *tableWidget, const QString &fieldId) const;
|
||||
|
||||
/**
|
||||
* @brief 啟用/禁用手動輸入
|
||||
* @param tableWidget 表格組件
|
||||
* @param enabled 是否啟用
|
||||
*/
|
||||
void enableManualInput(QWidget *tableWidget, bool enabled);
|
||||
|
||||
signals:
|
||||
/**
|
||||
* @brief 字段值變更信號(Form 表格)
|
||||
*/
|
||||
void fieldValueChanged(QWidget *tableWidget, const QString &fieldId,
|
||||
const QVariant &value);
|
||||
|
||||
/**
|
||||
* @brief 單元格值變更信號(Grid 表格)
|
||||
*/
|
||||
void cellValueChanged(QWidget *tableWidget, const QString &rowId,
|
||||
const QString &columnId, const QVariant &value);
|
||||
|
||||
private:
|
||||
// =====================================================
|
||||
// 表格創建方法
|
||||
// =====================================================
|
||||
|
||||
QWidget *createGridTable(const TableDefinition &tableDef);
|
||||
QWidget *createFormTable(const TableDefinition &tableDef);
|
||||
QWidget *createSeriesTable(const TableDefinition &tableDef);
|
||||
|
||||
// =====================================================
|
||||
// 字段組件創建方法
|
||||
// =====================================================
|
||||
|
||||
QWidget *createFieldWidget(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
QWidget *createNumericField(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
QWidget *createTextField(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
QWidget *createSelectionField(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
QWidget *createBooleanField(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
QWidget *createDateTimeField(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
QWidget *createCalculatedField(const FieldDefinition &fieldDef, QWidget *parent);
|
||||
|
||||
// =====================================================
|
||||
// 輔助方法
|
||||
// =====================================================
|
||||
|
||||
void connectFieldSignals(QWidget *fieldWidget, const QString &fieldId,
|
||||
QWidget *tableWidget);
|
||||
void applyStaticCells(QWidget *tableWidget, const TableDefinition &tableDef);
|
||||
|
||||
// =====================================================
|
||||
// 內部數據結構
|
||||
// =====================================================
|
||||
|
||||
struct TableWidgetData
|
||||
{
|
||||
TableDefinition definition;
|
||||
QMap<QString, QWidget *> fieldWidgets; // fieldId -> widget (for form/series)
|
||||
QTableWidget *gridWidget = nullptr; // for grid tables
|
||||
QTableWidget *seriesWidget = nullptr; // for series tables
|
||||
};
|
||||
|
||||
QMap<QWidget *, TableWidgetData> tableData;
|
||||
};
|
||||
|
||||
#endif // TABLEWIDGETFACTORY_H
|
||||
Reference in New Issue
Block a user