GrabBag/App/BeltTearing/BeltTearingApp/widgets/TearingDataTableWidget.h
2025-10-08 21:45:37 +08:00

87 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef TEARINGDATATABLEWIDGET_H
#define TEARINGDATATABLEWIDGET_H
#include <QWidget>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QJsonObject>
#include <QString>
#include <QSet>
#include <vector>
#include "IStatusUpdate.h"
#include "VrDateUtils.h"
// 自定义TableWidgetItem类支持按数字值排序
class NumericTableWidgetItem : public QTableWidgetItem
{
public:
NumericTableWidgetItem();
NumericTableWidgetItem(const QString &text);
bool operator<(const QTableWidgetItem &other) const override;
// 实现clone方法确保在复制时能正确创建对象
QTableWidgetItem* clone() const override;
private:
double toDouble() const;
};
Q_DECLARE_METATYPE(NumericTableWidgetItem)
class TearingDataTableWidget : public QWidget
{
Q_OBJECT
public:
explicit TearingDataTableWidget(QWidget *parent = nullptr);
~TearingDataTableWidget();
// 添加多条数据(自动选择优化方法)
void addData(const QString devName, const TearingData &dataList);
// 添加多条数据(自动选择优化方法)
void addData(const QString devName, const std::vector<TearingData> &dataList);
// 批量添加数据,优化大量数据处理性能
void addDataBatch(const QString devName, const std::vector<TearingData> &dataList);
// 清除所有数据
void clearData();
// 设置表格最大行数限制,防止内存占用过大
void setMaximumRows(int maxRows);
// 从集合中移除指定行的设备ID组合
void removeRowFromSet(int row);
private:
void setupUI();
void setupTable();
void _AddDataToTable(const QString devName, const TearingData &data, int row);
QString getTearStatusText(const QString &status);
QString getTearTypeText(const QString &type);
int findExistingRowById(const QString &devName, const QString &id);
// 内存管理相关方法
void limitRowsIfNeeded();
// 排序相关的私有方法
void connectHeaderSignals();
// 与服务端颜色协调的颜色数组
QColor m_tearColors[10];
QTableWidget *m_tableWidget;
int m_maxRows = -1; // 最大行数限制,-1表示无限制
// 使用QSet存储设备名称和ID的组合格式为"设备名:ID"
QSet<QString> m_devIdSet;
};
#endif // TEARINGDATATABLEWIDGET_H