feat:初始化wuhan_QT界面代码
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
#include "faulttable.h"
|
||||
#include <QVBoxLayout>
|
||||
#include <QHBoxLayout>
|
||||
#include <QTableWidget>
|
||||
#include <QHeaderView>
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#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<FaultRecord>& 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);
|
||||
}
|
||||
Reference in New Issue
Block a user