#ifndef FAULTTABLE_H #define FAULTTABLE_H #include #include #include "appcontext.h" // FaultRecord class QTableWidget; class QLabel; class QPushButton; // ===================== 故障分页表格 ===================== // 表头(序号/故障时间/故障名称)+ 数据行 + 上一页/下一页 + 页码指示,每页 6 行 class FaultTable : public QWidget { Q_OBJECT public: explicit FaultTable(QWidget* parent = nullptr); // 表头高度:同页其他控件可据此与表格内容区对齐 static const int kHeaderHeight = 70; void setData(const QVector& data); void setPage(int p); int page() const { return m_page; } int pageCount() const; // 供外部设置 Tab 顺序用(定义在 .cpp,避免用到未完整声明的类型) QWidget* view() const; QWidget* prevButton() const; QWidget* nextButton() const; signals: void pageChanged(int page); void rowClicked(int globalIndex); protected: bool eventFilter(QObject* obj, QEvent* ev) override; // 拦截 Tab(按行切换选中)、回车/空格(等同点击) private: void refresh(); void updateRowHeights(); // 行高 = 视口高度 / 每页行数,保证 6 行铺满且无滚动条 void setHoverRow(int row); // 鼠标悬停的整行高亮 QTableWidget* m_table = nullptr; QLabel* m_pageLabel = nullptr; QPushButton* m_prev = nullptr; QPushButton* m_next = nullptr; QVector m_data; int m_page = 0; int m_pageSize = 6; int m_hoverRow = -1; }; #endif // FAULTTABLE_H