GrabBag/App/BeltTearing/BeltTearingApp/widgets/TearingDataTableWidget.h
2025-09-29 00:56:53 +08:00

75 lines
2.0 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 <vector>
#include "IStatusUpdate.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 TearingData &data);
// 添加多条数据(自动选择优化方法)
void addData(const std::vector<TearingData> &dataList);
// 添加单条JSON数据
void addData(const QJsonObject &data);
// 批量添加数据,优化大量数据处理性能
void addDataBatch(const std::vector<TearingData> &dataList);
// 清除所有数据
void clearData();
// 设置表格最大行数限制,防止内存占用过大
void setMaximumRows(int maxRows);
private:
void setupUI();
void setupTable();
QString getTearStatusText(const QString &status);
QString getTearTypeText(const QString &type);
int findExistingRowById(const QString &id);
// 内存管理相关方法
void limitRowsIfNeeded();
// 排序相关的私有方法
void connectHeaderSignals();
QTableWidget *m_tableWidget;
int m_maxRows = -1; // 最大行数限制,-1表示无限制
};
#endif // TEARINGDATATABLEWIDGET_H