Files
QT_wuhan_YT/widgets/faulttable.h
T
2026-10-14 18:22:41 +08:00

56 lines
1.6 KiB
C++

#ifndef FAULTTABLE_H
#define FAULTTABLE_H
#include <QWidget>
#include <QVector>
#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<FaultRecord>& 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<FaultRecord> m_data;
int m_page = 0;
int m_pageSize = 6;
int m_hoverRow = -1;
};
#endif // FAULTTABLE_H