diff --git a/include/alarmEventDataView.h b/include/alarmEventDataView.h index ba5ff88..7c492c9 100644 --- a/include/alarmEventDataView.h +++ b/include/alarmEventDataView.h @@ -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 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); diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index 740cd82..10f5dbf 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -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 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) { diff --git a/source/alarmEventRealTimeDock.cpp b/source/alarmEventRealTimeDock.cpp index d90c123..818815b 100644 --- a/source/alarmEventRealTimeDock.cpp +++ b/source/alarmEventRealTimeDock.cpp @@ -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");