feat:完成历史事件的分页查看

This commit is contained in:
duanshengchao 2025-10-28 16:39:23 +08:00
parent ea9970230a
commit 9d82145e6d
3 changed files with 119 additions and 17 deletions

View File

@ -82,7 +82,7 @@ public:
,width(w){}
};
explicit AlarmEventDataModel(QObject* parent = nullptr);
explicit AlarmEventDataModel(AlarmDataMode mode, QObject* parent = nullptr);
~AlarmEventDataModel();
//QAbstractTableModel接口实现
@ -96,13 +96,17 @@ public:
//自定义功能函数
const QVector<SectionData> headerData() const {return m_headerData;}
void setMode(AlarmDataMode mode) {m_dataMode = mode;}
void setMaxRealTimeEvents(int value) {m_maxRealTimeEvents = value;}
//void setMode(AlarmDataMode mode);
void setMaxRealTimeEvents(int value);
const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;}
void setFilter(const AlarmEventDataFilter& filter);
void refresh();
//void setPageSize(int);
bool setCurrentPage(int);
void previousPage();
void nextPage();
void firstPage();
void lastPage();
private slots:
void onTimeoutSimulateData();
@ -173,10 +177,10 @@ class AlarmEventDataView : public QWidget
Q_OBJECT
public:
AlarmEventDataView(QWidget* parent = nullptr);
AlarmEventDataView(AlarmDataMode mode, QWidget* parent = nullptr);
~AlarmEventDataView();
void setModelMode(AlarmDataMode, int maxRealTimeEvents = 5);
//void setModelMode(AlarmDataMode, int maxRealTimeEvents = 5);
public slots:
void onBtnClicked_Confirm(const QModelIndex& index);

View File

@ -86,11 +86,21 @@ bool AlarmEventDataFilter::isEmpty()
///////------AlarmEventDataModel-----
AlarmEventDataModel::AlarmEventDataModel(QObject* parent)
AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent)
: QAbstractTableModel(parent)
,m_maxRealTimeEvents(5)
, m_dataMode(mode)
, m_maxRealTimeEvents(5)
{
m_dataMode = Historical;
if(m_dataMode == RealTime) //创建几个“空事件”来初始化表格
{
for(int i = 0; i < m_maxRealTimeEvents; ++i)
{
EventData event;
event.id = ""; //空事件
m_displayEvents.append(event);
}
}
m_paginationInfo.entriesPerPage = 100;
m_paginationInfo.currentPage = 1;
m_paginationInfo.totalEntries = 0;
@ -125,6 +135,8 @@ QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const
int col = index.column();
int globalRow = (m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage + row;
const EventData& event = m_displayEvents.at(row);
if(event.id.isEmpty()) //无效事件
return QVariant();
//EventData event = m_displayEvents[row];
switch (role)
@ -238,6 +250,45 @@ void AlarmEventDataModel::iniHeaderData()
m_headerData.emplace_back(SectionData("操作", 172, Operation));
}
/*void AlarmEventDataModel::setMode(AlarmDataMode mode)
{
if(m_dataMode == mode)
return;
m_dataMode = mode;
if(mode == Historical)
{}
else
{}
}*/
void AlarmEventDataModel::setMaxRealTimeEvents(int count)
{
if(m_dataMode == Historical) //实时列表初始化表格
{
if(m_maxRealTimeEvents == count)
return;
else if(m_maxRealTimeEvents < count)
{
int DValue = count - m_maxRealTimeEvents;
for(int i = 0; i < DValue; ++i)
m_displayEvents.removeLast();
}
else if(m_maxRealTimeEvents > count)
{
int DValue = m_maxRealTimeEvents - count;
for(int i = 0; i < DValue; ++i)
{
EventData event;
event.id = ""; //空事件
m_displayEvents.append(event);
}
}
m_maxRealTimeEvents = count;
}
}
void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter)
{
m_currentFilter = filter;
@ -358,7 +409,7 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
if(m_displayEvents.size() >= m_maxRealTimeEvents)
m_displayEvents.removeLast();
//按照时间顺序排序(从小到大
//按照时间顺序排序(从后到前
int insertPosition = 0;
for(; insertPosition < m_displayEvents.size(); ++insertPosition)
{
@ -374,6 +425,52 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
endResetModel();
}
bool AlarmEventDataModel::setCurrentPage(int page)
{
if(m_paginationInfo.currentPage != page && page > 0 && page <= m_paginationInfo.totalPages)
{
m_paginationInfo.currentPage = page;
updateCurPageData();
return true;
}
return false;
}
void AlarmEventDataModel::previousPage()
{
if(m_paginationInfo.currentPage == 1)
return;
int page = m_paginationInfo.currentPage;
setCurrentPage(--page);
}
void AlarmEventDataModel::nextPage()
{
if(m_paginationInfo.currentPage == m_paginationInfo.totalPages)
return;
int page = m_paginationInfo.currentPage;
setCurrentPage(++page);
}
void AlarmEventDataModel::firstPage()
{
if(m_paginationInfo.currentPage == 1)
return;
setCurrentPage(1);
}
void AlarmEventDataModel::lastPage()
{
if(m_paginationInfo.currentPage == m_paginationInfo.totalPages)
return;
setCurrentPage(m_paginationInfo.totalPages);
}
///////------AlarmEventDataDelegate-----
AlarmEventDataDelegate::AlarmEventDataDelegate(QTableView* view, QObject* parent)
@ -426,7 +523,9 @@ void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem
painter->restore();
//绘制操作按钮
if(index.column() == m_tableView->model()->columnCount() - 1)
QModelIndex numIndex = m_tableView->model()->index(index.row(), 0);
QString number = numIndex.data(Qt::DisplayRole).toString();
if(!number.isEmpty() && index.column() == m_tableView->model()->columnCount() - 1)
{
int nMarginH = 10;
int nMarginV = 5;
@ -539,7 +638,7 @@ bool AlarmEventDataDelegate::editorEvent(QEvent* event, QAbstractItemModel* mode
///////------AlarmEventDataView-----
AlarmEventDataView::AlarmEventDataView(QWidget* parent)
AlarmEventDataView::AlarmEventDataView(AlarmDataMode mode, QWidget* parent)
: QWidget(parent)
{
m_tableView = new QTableView(this);
@ -549,7 +648,7 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent)
m_tableView->setShowGrid(false);
//m_tableView->setStyleSheet("QHeaderView{background-color: rgb(40, 40, 40);} QHeaderView::section{background-color:transparent;}");
m_tableModel = new AlarmEventDataModel(this);
m_tableModel = new AlarmEventDataModel(mode, this);
m_tableView->setModel(m_tableModel);
//设置表头
const QVector<AlarmEventDataModel::SectionData> headerData = m_tableModel->headerData();
@ -576,7 +675,7 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent)
AlarmEventDataView::~AlarmEventDataView()
{}
void AlarmEventDataView::setModelMode(AlarmDataMode mode, int maxRealTimeEvents)
/*void AlarmEventDataView::setModelMode(AlarmDataMode mode, int maxRealTimeEvents)
{
if(m_tableModel)
{
@ -584,7 +683,7 @@ void AlarmEventDataView::setModelMode(AlarmDataMode mode, int maxRealTimeEvents)
if(mode == RealTime)
m_tableModel->setMaxRealTimeEvents(maxRealTimeEvents);
}
}
}*/
void AlarmEventDataView::onBtnClicked_Confirm(const QModelIndex& index)
{

View File

@ -16,8 +16,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent)
m_isInAnimation = false;
m_curState = "collapse";
m_tableView = new AlarmEventDataView(this);
m_tableView->setModelMode(RealTime);
m_tableView = new AlarmEventDataView(RealTime, this);
ui->tableLayout->addWidget(m_tableView);
m_animation = new QPropertyAnimation(this, "geometry");