#include "faulttable.h" #include #include #include #include #include #include #include "global.h" FaultTable::FaultTable(QWidget* parent) : QWidget(parent) { QVBoxLayout* lay = new QVBoxLayout(this); lay->setContentsMargins(0, 0, 0, 0); lay->setSpacing(10); // 分页行(上一页 / 页码 / 下一页) QHBoxLayout* nav = new QHBoxLayout(); nav->addStretch(1); m_prev = new QPushButton("上一页", this); m_prev->setFixedSize(160, 64); connect(m_prev, &QPushButton::clicked, this, [this]() { if (m_page > 0) { setPage(m_page - 1); emit pageChanged(m_page); } }); m_pageLabel = new QLabel("1/1", this); m_pageLabel->setAlignment(Qt::AlignCenter); m_pageLabel->setStyleSheet(QString("color:%1;font-size:22px;").arg(C::TEXT)); m_pageLabel->setFixedWidth(140); m_next = new QPushButton("下一页", this); m_next->setFixedSize(160, 64); connect(m_next, &QPushButton::clicked, this, [this]() { if (m_page < pageCount() - 1) { setPage(m_page + 1); emit pageChanged(m_page); } }); nav->addWidget(m_prev); nav->addWidget(m_pageLabel); nav->addWidget(m_next); lay->addLayout(nav); // 表格 m_table = new QTableWidget(this); m_table->setColumnCount(3); m_table->setHorizontalHeaderLabels(QStringList() << "序号" << "故障时间" << "故障名称"); m_table->setEditTriggers(QAbstractItemView::NoEditTriggers); m_table->setSelectionBehavior(QAbstractItemView::SelectRows); m_table->setSelectionMode(QAbstractItemView::SingleSelection); m_table->verticalHeader()->setVisible(false); m_table->setAlternatingRowColors(true); m_table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); m_table->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); m_table->setColumnWidth(0, 120); m_table->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch); m_table->verticalHeader()->setDefaultSectionSize(100); m_table->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); connect(m_table, &QTableWidget::cellClicked, this, [this](int row, int) { int global = m_page * m_pageSize + row; if (global >= 0 && global < m_data.size()) emit rowClicked(global); }); lay->addWidget(m_table, 1); refresh(); } void FaultTable::setData(const QVector& data) { m_data = data; if (m_page >= pageCount() && pageCount() > 0) m_page = pageCount() - 1; refresh(); } void FaultTable::setPage(int p) { m_page = qBound(0, p, qMax(0, pageCount() - 1)); refresh(); } int FaultTable::pageCount() const { if (m_data.isEmpty()) return 1; return (m_data.size() + m_pageSize - 1) / m_pageSize; } void FaultTable::refresh() { m_table->setRowCount(0); m_table->setRowCount(m_pageSize); int start = m_page * m_pageSize; for (int r = 0; r < m_pageSize; ++r) { int idx = start + r; bool has = idx < m_data.size(); for (int c = 0; c < 3; ++c) { QTableWidgetItem* it = new QTableWidgetItem(); it->setTextAlignment(Qt::AlignCenter); if (has) { const FaultRecord& rec = m_data[idx]; if (c == 0) it->setText(QString::number(idx + 1)); else if (c == 1) it->setText(rec.time); else it->setText(rec.desc); } m_table->setItem(r, c, it); } } // 空数据显示提示 if (m_data.isEmpty()) { m_table->clearSelection(); } m_pageLabel->setText(QString("%1/%2").arg(m_page + 1).arg(pageCount())); m_prev->setEnabled(m_page > 0); m_next->setEnabled(m_page < pageCount() - 1); }