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

View File

@ -86,11 +86,21 @@ bool AlarmEventDataFilter::isEmpty()
///////------AlarmEventDataModel----- ///////------AlarmEventDataModel-----
AlarmEventDataModel::AlarmEventDataModel(QObject* parent) AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent)
: QAbstractTableModel(parent) : QAbstractTableModel(parent)
, m_dataMode(mode)
, m_maxRealTimeEvents(5) , 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.entriesPerPage = 100;
m_paginationInfo.currentPage = 1; m_paginationInfo.currentPage = 1;
m_paginationInfo.totalEntries = 0; m_paginationInfo.totalEntries = 0;
@ -125,6 +135,8 @@ QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const
int col = index.column(); int col = index.column();
int globalRow = (m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage + row; int globalRow = (m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerPage + row;
const EventData& event = m_displayEvents.at(row); const EventData& event = m_displayEvents.at(row);
if(event.id.isEmpty()) //无效事件
return QVariant();
//EventData event = m_displayEvents[row]; //EventData event = m_displayEvents[row];
switch (role) switch (role)
@ -238,6 +250,45 @@ void AlarmEventDataModel::iniHeaderData()
m_headerData.emplace_back(SectionData("操作", 172, Operation)); 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) void AlarmEventDataModel::setFilter(const AlarmEventDataFilter& filter)
{ {
m_currentFilter = filter; m_currentFilter = filter;
@ -358,7 +409,7 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
if(m_displayEvents.size() >= m_maxRealTimeEvents) if(m_displayEvents.size() >= m_maxRealTimeEvents)
m_displayEvents.removeLast(); m_displayEvents.removeLast();
//按照时间顺序排序(从小到大 //按照时间顺序排序(从后到前
int insertPosition = 0; int insertPosition = 0;
for(; insertPosition < m_displayEvents.size(); ++insertPosition) for(; insertPosition < m_displayEvents.size(); ++insertPosition)
{ {
@ -374,6 +425,52 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
endResetModel(); 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::AlarmEventDataDelegate(QTableView* view, QObject* parent) AlarmEventDataDelegate::AlarmEventDataDelegate(QTableView* view, QObject* parent)
@ -426,7 +523,9 @@ void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem
painter->restore(); 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 nMarginH = 10;
int nMarginV = 5; int nMarginV = 5;
@ -539,7 +638,7 @@ bool AlarmEventDataDelegate::editorEvent(QEvent* event, QAbstractItemModel* mode
///////------AlarmEventDataView----- ///////------AlarmEventDataView-----
AlarmEventDataView::AlarmEventDataView(QWidget* parent) AlarmEventDataView::AlarmEventDataView(AlarmDataMode mode, QWidget* parent)
: QWidget(parent) : QWidget(parent)
{ {
m_tableView = new QTableView(this); m_tableView = new QTableView(this);
@ -549,7 +648,7 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent)
m_tableView->setShowGrid(false); m_tableView->setShowGrid(false);
//m_tableView->setStyleSheet("QHeaderView{background-color: rgb(40, 40, 40);} QHeaderView::section{background-color:transparent;}"); //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); m_tableView->setModel(m_tableModel);
//设置表头 //设置表头
const QVector<AlarmEventDataModel::SectionData> headerData = m_tableModel->headerData(); const QVector<AlarmEventDataModel::SectionData> headerData = m_tableModel->headerData();
@ -576,7 +675,7 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent)
AlarmEventDataView::~AlarmEventDataView() AlarmEventDataView::~AlarmEventDataView()
{} {}
void AlarmEventDataView::setModelMode(AlarmDataMode mode, int maxRealTimeEvents) /*void AlarmEventDataView::setModelMode(AlarmDataMode mode, int maxRealTimeEvents)
{ {
if(m_tableModel) if(m_tableModel)
{ {
@ -584,7 +683,7 @@ void AlarmEventDataView::setModelMode(AlarmDataMode mode, int maxRealTimeEvents)
if(mode == RealTime) if(mode == RealTime)
m_tableModel->setMaxRealTimeEvents(maxRealTimeEvents); m_tableModel->setMaxRealTimeEvents(maxRealTimeEvents);
} }
} }*/
void AlarmEventDataView::onBtnClicked_Confirm(const QModelIndex& index) void AlarmEventDataView::onBtnClicked_Confirm(const QModelIndex& index)
{ {

View File

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