#ifndef TEARINGDATATABLEWIDGET_H #define TEARINGDATATABLEWIDGET_H #include #include #include #include #include #include #include #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 &dataList); // 添加单条JSON数据 void addData(const QJsonObject &data); // 批量添加数据,优化大量数据处理性能 void addDataBatch(const std::vector &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