From baa048c2d451885711ee58bbdc213bb73aa29cfe Mon Sep 17 00:00:00 2001 From: duanshengchao <519970194@qq.com> Date: Tue, 21 Oct 2025 11:13:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=AE=8C=E6=95=B4=E5=AE=9E=E6=97=B6?= =?UTF-8?q?=E5=91=8A=E8=AD=A6=E6=95=B0=E6=8D=AE=E6=A8=A1=E6=8B=9F=E4=B8=8E?= =?UTF-8?q?=E5=8A=A0=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/alarmEventDataView.h | 7 ++ source/alarmEventDataView.cpp | 138 +++++++++++++++++++++--------- source/alarmEventRealTimeDock.cpp | 1 + ui/alarmEventRealTimeDock.ui | 1 - 4 files changed, 105 insertions(+), 42 deletions(-) diff --git a/include/alarmEventDataView.h b/include/alarmEventDataView.h index effdaae..1e59456 100644 --- a/include/alarmEventDataView.h +++ b/include/alarmEventDataView.h @@ -34,6 +34,7 @@ private: int m_status; }; +class QTimer; class AlarmEventDataModel : public QAbstractTableModel { Q_OBJECT @@ -92,6 +93,7 @@ public: //自定义功能函数 const QVector headerData() const {return m_headerData;} + void setMode(AlarmDataMode mode) {m_dataMode = mode;} void setMaxRealTimeEvents(int value) {m_maxRealTimeEvents = value;} const int getMaxRealTimeEvents() const {return m_maxRealTimeEvents;} void setFilter(const AlarmEventDataFilter& filter); @@ -99,6 +101,7 @@ public: void refresh(); private: + void onTimeoutSimulateData(); void onRealTimeEventReceived(const EventData& event); private: @@ -113,6 +116,8 @@ private: QVector m_headerData; PaginationInfo m_paginationInfo; + QTimer* m_simulatedDataTimer; + AlarmDataMode m_dataMode; AlarmEventDataFilter m_currentFilter; int m_maxRealTimeEvents; @@ -141,6 +146,8 @@ public: AlarmEventDataView(QWidget* parent = nullptr); ~AlarmEventDataView(); + void setModelMode(AlarmDataMode); + private: QTableView* m_tableView; AlarmEventDataModel* m_tableModel; diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index 29b21cf..1e8b98c 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +#include ///////------AlarmEventDataFilter----- AlarmEventDataFilter::AlarmEventDataFilter() @@ -62,6 +64,11 @@ AlarmEventDataModel::AlarmEventDataModel(QObject* parent) m_paginationInfo.currentPage = 1; m_paginationInfo.totalEntries = 0; iniHeaderData(); + + //实时数据测试 + m_simulatedDataTimer = new QTimer(this); + connect(m_simulatedDataTimer, &QTimer::timeout, this, &AlarmEventDataModel::onTimeoutSimulateData); + m_simulatedDataTimer->start(2000); } AlarmEventDataModel::~AlarmEventDataModel() @@ -80,7 +87,7 @@ QModelIndex AlarmEventDataModel::index(int row, int column, const QModelIndex& p QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const { - if(index.isValid()) + if(!index.isValid()) return QVariant(); int row = index.row(); @@ -95,46 +102,60 @@ QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const { switch(col) { - case Index: - return QString::number(globalRow + 1); - case ReceiveTime: - return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss"); - case SOETime: - return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss"); - case Station: - return event.stationName; - case Bay: - return event.bayName; - case Description: - return event.description; - case Type: - return event.type; - case Severity: - return event.severity; - case Status: - { - if(event.status < 3) - return QString("未确认"); - else - return QString("已确认"); - } + case Index: + return QString::number(globalRow + 1); + case ReceiveTime: + return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss"); + case SOETime: + return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss"); + case Station: + return event.stationName; + case Bay: + return event.bayName; + case Description: + return event.description; + case Type: + return event.type; + case Severity: + return event.severity; + case Status: + { + if(event.status < 3) + return QString("未确认"); + else + return QString("已确认"); + } + default: + return QVariant(); } } case Qt::ForegroundRole: { - if(event.severity == "事故") - return QColor(255, 85, 0); - else if(event.severity == "异常") - return QColor(255, 170, 0); - else if(event.severity == "预警") - return QColor(0, 170, 255); - else if(event.severity == "告知") - return QColor(0, 170, 0); - - if(event.status < 3) - return QColor(0, 170, 255); - else - return QColor(0, 170, 0); + switch(col) + { + case Severity: + { + if(event.severity == "事故") + return QColor(255, 85, 0); + else if(event.severity == "异常") + return QColor(255, 170, 0); + else if(event.severity == "预警") + return QColor(0, 170, 255); + else if(event.severity == "告知") + return QColor(0, 170, 0); + else + return QColor(250, 250, 250); + } + case Status: + { + if(event.status < 3) + return QColor(0, 170, 255); + else + return QColor(0, 170, 0); + } + default: + return QColor(250, 250, 250); + } } case Qt::TextAlignmentRole: return Qt::AlignCenter; //居中展示 @@ -175,12 +196,12 @@ Qt::ItemFlags AlarmEventDataModel::flags(const QModelIndex& index) const void AlarmEventDataModel::iniHeaderData() { m_headerData.emplace_back(SectionData("序号", 90, Index)); - m_headerData.emplace_back(SectionData("接收时间", 270, ReceiveTime)); - m_headerData.emplace_back(SectionData("SOE时间", 270, SOETime)); + m_headerData.emplace_back(SectionData("接收时间", 200, ReceiveTime)); + m_headerData.emplace_back(SectionData("SOE时间", 200, SOETime)); m_headerData.emplace_back(SectionData("厂站", 200, Station)); m_headerData.emplace_back(SectionData("间隔", 200, Bay)); m_headerData.emplace_back(SectionData("信息", -1, Description)); - m_headerData.emplace_back(SectionData("类型", 200, Type)); + m_headerData.emplace_back(SectionData("类型", 150, Type)); m_headerData.emplace_back(SectionData("等级", 150, Severity)); m_headerData.emplace_back(SectionData("确认状态", 150, Status)); m_headerData.emplace_back(SectionData("操作", 300, Operation)); @@ -231,6 +252,35 @@ void AlarmEventDataModel::updateEventData(int index, const EventData& updatedEve emit dataChanged(modelIndex, modelIndex); } +void AlarmEventDataModel::onTimeoutSimulateData() +{ + //模拟实时告警数据 + static int id = 0, min = 0, max = 3; + int randomInt = min + QRandomGenerator::global()->bounded(min, max + 1); + QString strID = QString::number(++id); + //qDebug() << id << " " << strID; + EventData event; + event.id = strID; + event.name = QString("实时告警") + strID; + event.timestamp = QDateTime::currentMSecsSinceEpoch(); + event.stationName = QString("厂站") + QString::number(randomInt); + event.bayName = QString("间隔") + QString::number(randomInt); + event.description = ""; + event.type = 5; + QString severity = QString("预警"); + if(randomInt == 0) + severity = QString("告知"); + else if(randomInt == 1) + severity = QString("预警"); + else if(randomInt == 2) + severity = QString("异常"); + else if(randomInt == 3) + severity = QString("事故"); + event.severity = severity; + event.status = 0; + onRealTimeEventReceived(event); +} + void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event) { if(m_dataMode != RealTime) @@ -281,7 +331,7 @@ void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem QStyleOptionViewItem opt = option; initStyleOption(&opt, index); if((index.row() + 1) % 2 == 0) - painter->fillRect(opt.rect, QColor(11, 26, 33, 200)); + painter->fillRect(opt.rect, QColor(11, 26, 33, 100)); else painter->fillRect(opt.rect, QColor(11, 26, 33, 0)); @@ -336,3 +386,9 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent) AlarmEventDataView::~AlarmEventDataView() {} + +void AlarmEventDataView::setModelMode(AlarmDataMode mode) +{ + if(m_tableModel) + m_tableModel->setMode(mode); +} diff --git a/source/alarmEventRealTimeDock.cpp b/source/alarmEventRealTimeDock.cpp index c6c8e02..d90c123 100644 --- a/source/alarmEventRealTimeDock.cpp +++ b/source/alarmEventRealTimeDock.cpp @@ -17,6 +17,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent) m_curState = "collapse"; m_tableView = new AlarmEventDataView(this); + m_tableView->setModelMode(RealTime); ui->tableLayout->addWidget(m_tableView); m_animation = new QPropertyAnimation(this, "geometry"); diff --git a/ui/alarmEventRealTimeDock.ui b/ui/alarmEventRealTimeDock.ui index 0577ca4..53e0e74 100644 --- a/ui/alarmEventRealTimeDock.ui +++ b/ui/alarmEventRealTimeDock.ui @@ -542,7 +542,6 @@ QTableView } QTableView::item { - color: rgb(250, 250, 250); background-color:transparent; } QTableView::item:hover