#ifndef TEARINGDATATABLEWIDGET_H #define TEARINGDATATABLEWIDGET_H #include #include #include #include #include #include #include #include #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 &dataList); // 批量添加数据,优化大量数据处理性能 void addDataBatch(const QString devName, const std::vector &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 m_devIdSet; }; #endif // TEARINGDATATABLEWIDGET_H