feat:完整实时告警数据模拟与加载
This commit is contained in:
parent
4d6f10f762
commit
baa048c2d4
|
|
@ -34,6 +34,7 @@ private:
|
||||||
int m_status;
|
int m_status;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class QTimer;
|
||||||
class AlarmEventDataModel : public QAbstractTableModel
|
class AlarmEventDataModel : public QAbstractTableModel
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
@ -92,6 +93,7 @@ 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 setMaxRealTimeEvents(int value) {m_maxRealTimeEvents = value;}
|
void setMaxRealTimeEvents(int value) {m_maxRealTimeEvents = 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);
|
||||||
|
|
@ -99,6 +101,7 @@ public:
|
||||||
void refresh();
|
void refresh();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void onTimeoutSimulateData();
|
||||||
void onRealTimeEventReceived(const EventData& event);
|
void onRealTimeEventReceived(const EventData& event);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -113,6 +116,8 @@ private:
|
||||||
QVector<SectionData> m_headerData;
|
QVector<SectionData> m_headerData;
|
||||||
PaginationInfo m_paginationInfo;
|
PaginationInfo m_paginationInfo;
|
||||||
|
|
||||||
|
QTimer* m_simulatedDataTimer;
|
||||||
|
|
||||||
AlarmDataMode m_dataMode;
|
AlarmDataMode m_dataMode;
|
||||||
AlarmEventDataFilter m_currentFilter;
|
AlarmEventDataFilter m_currentFilter;
|
||||||
int m_maxRealTimeEvents;
|
int m_maxRealTimeEvents;
|
||||||
|
|
@ -141,6 +146,8 @@ public:
|
||||||
AlarmEventDataView(QWidget* parent = nullptr);
|
AlarmEventDataView(QWidget* parent = nullptr);
|
||||||
~AlarmEventDataView();
|
~AlarmEventDataView();
|
||||||
|
|
||||||
|
void setModelMode(AlarmDataMode);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTableView* m_tableView;
|
QTableView* m_tableView;
|
||||||
AlarmEventDataModel* m_tableModel;
|
AlarmEventDataModel* m_tableModel;
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,8 @@
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QTimer>
|
||||||
|
#include <QRandomGenerator>
|
||||||
|
|
||||||
///////------AlarmEventDataFilter-----
|
///////------AlarmEventDataFilter-----
|
||||||
AlarmEventDataFilter::AlarmEventDataFilter()
|
AlarmEventDataFilter::AlarmEventDataFilter()
|
||||||
|
|
@ -62,6 +64,11 @@ AlarmEventDataModel::AlarmEventDataModel(QObject* parent)
|
||||||
m_paginationInfo.currentPage = 1;
|
m_paginationInfo.currentPage = 1;
|
||||||
m_paginationInfo.totalEntries = 0;
|
m_paginationInfo.totalEntries = 0;
|
||||||
iniHeaderData();
|
iniHeaderData();
|
||||||
|
|
||||||
|
//实时数据测试
|
||||||
|
m_simulatedDataTimer = new QTimer(this);
|
||||||
|
connect(m_simulatedDataTimer, &QTimer::timeout, this, &AlarmEventDataModel::onTimeoutSimulateData);
|
||||||
|
m_simulatedDataTimer->start(2000);
|
||||||
}
|
}
|
||||||
|
|
||||||
AlarmEventDataModel::~AlarmEventDataModel()
|
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
|
QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const
|
||||||
{
|
{
|
||||||
if(index.isValid())
|
if(!index.isValid())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|
||||||
int row = index.row();
|
int row = index.row();
|
||||||
|
|
@ -95,46 +102,60 @@ QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const
|
||||||
{
|
{
|
||||||
switch(col)
|
switch(col)
|
||||||
{
|
{
|
||||||
case Index:
|
case Index:
|
||||||
return QString::number(globalRow + 1);
|
return QString::number(globalRow + 1);
|
||||||
case ReceiveTime:
|
case ReceiveTime:
|
||||||
return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss");
|
return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss");
|
||||||
case SOETime:
|
case SOETime:
|
||||||
return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss");
|
return QDateTime::fromMSecsSinceEpoch(event.timestamp).toString("yyyy-MM-dd hh:mm:ss");
|
||||||
case Station:
|
case Station:
|
||||||
return event.stationName;
|
return event.stationName;
|
||||||
case Bay:
|
case Bay:
|
||||||
return event.bayName;
|
return event.bayName;
|
||||||
case Description:
|
case Description:
|
||||||
return event.description;
|
return event.description;
|
||||||
case Type:
|
case Type:
|
||||||
return event.type;
|
return event.type;
|
||||||
case Severity:
|
case Severity:
|
||||||
return event.severity;
|
return event.severity;
|
||||||
case Status:
|
case Status:
|
||||||
{
|
{
|
||||||
if(event.status < 3)
|
if(event.status < 3)
|
||||||
return QString("未确认");
|
return QString("未确认");
|
||||||
else
|
else
|
||||||
return QString("已确认");
|
return QString("已确认");
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
return QVariant();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case Qt::ForegroundRole:
|
case Qt::ForegroundRole:
|
||||||
{
|
{
|
||||||
if(event.severity == "事故")
|
switch(col)
|
||||||
return QColor(255, 85, 0);
|
{
|
||||||
else if(event.severity == "异常")
|
case Severity:
|
||||||
return QColor(255, 170, 0);
|
{
|
||||||
else if(event.severity == "预警")
|
if(event.severity == "事故")
|
||||||
return QColor(0, 170, 255);
|
return QColor(255, 85, 0);
|
||||||
else if(event.severity == "告知")
|
else if(event.severity == "异常")
|
||||||
return QColor(0, 170, 0);
|
return QColor(255, 170, 0);
|
||||||
|
else if(event.severity == "预警")
|
||||||
if(event.status < 3)
|
return QColor(0, 170, 255);
|
||||||
return QColor(0, 170, 255);
|
else if(event.severity == "告知")
|
||||||
else
|
return QColor(0, 170, 0);
|
||||||
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:
|
case Qt::TextAlignmentRole:
|
||||||
return Qt::AlignCenter; //居中展示
|
return Qt::AlignCenter; //居中展示
|
||||||
|
|
@ -175,12 +196,12 @@ Qt::ItemFlags AlarmEventDataModel::flags(const QModelIndex& index) const
|
||||||
void AlarmEventDataModel::iniHeaderData()
|
void AlarmEventDataModel::iniHeaderData()
|
||||||
{
|
{
|
||||||
m_headerData.emplace_back(SectionData("序号", 90, Index));
|
m_headerData.emplace_back(SectionData("序号", 90, Index));
|
||||||
m_headerData.emplace_back(SectionData("接收时间", 270, ReceiveTime));
|
m_headerData.emplace_back(SectionData("接收时间", 200, ReceiveTime));
|
||||||
m_headerData.emplace_back(SectionData("SOE时间", 270, SOETime));
|
m_headerData.emplace_back(SectionData("SOE时间", 200, SOETime));
|
||||||
m_headerData.emplace_back(SectionData("厂站", 200, Station));
|
m_headerData.emplace_back(SectionData("厂站", 200, Station));
|
||||||
m_headerData.emplace_back(SectionData("间隔", 200, Bay));
|
m_headerData.emplace_back(SectionData("间隔", 200, Bay));
|
||||||
m_headerData.emplace_back(SectionData("信息", -1, Description));
|
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, Severity));
|
||||||
m_headerData.emplace_back(SectionData("确认状态", 150, Status));
|
m_headerData.emplace_back(SectionData("确认状态", 150, Status));
|
||||||
m_headerData.emplace_back(SectionData("操作", 300, Operation));
|
m_headerData.emplace_back(SectionData("操作", 300, Operation));
|
||||||
|
|
@ -231,6 +252,35 @@ void AlarmEventDataModel::updateEventData(int index, const EventData& updatedEve
|
||||||
emit dataChanged(modelIndex, modelIndex);
|
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)
|
void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
|
||||||
{
|
{
|
||||||
if(m_dataMode != RealTime)
|
if(m_dataMode != RealTime)
|
||||||
|
|
@ -281,7 +331,7 @@ void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem
|
||||||
QStyleOptionViewItem opt = option;
|
QStyleOptionViewItem opt = option;
|
||||||
initStyleOption(&opt, index);
|
initStyleOption(&opt, index);
|
||||||
if((index.row() + 1) % 2 == 0)
|
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
|
else
|
||||||
painter->fillRect(opt.rect, QColor(11, 26, 33, 0));
|
painter->fillRect(opt.rect, QColor(11, 26, 33, 0));
|
||||||
|
|
||||||
|
|
@ -336,3 +386,9 @@ AlarmEventDataView::AlarmEventDataView(QWidget* parent)
|
||||||
|
|
||||||
AlarmEventDataView::~AlarmEventDataView()
|
AlarmEventDataView::~AlarmEventDataView()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
void AlarmEventDataView::setModelMode(AlarmDataMode mode)
|
||||||
|
{
|
||||||
|
if(m_tableModel)
|
||||||
|
m_tableModel->setMode(mode);
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent)
|
||||||
m_curState = "collapse";
|
m_curState = "collapse";
|
||||||
|
|
||||||
m_tableView = new AlarmEventDataView(this);
|
m_tableView = new AlarmEventDataView(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");
|
||||||
|
|
|
||||||
|
|
@ -542,7 +542,6 @@ QTableView
|
||||||
}
|
}
|
||||||
QTableView::item
|
QTableView::item
|
||||||
{
|
{
|
||||||
color: rgb(250, 250, 250);
|
|
||||||
background-color:transparent;
|
background-color:transparent;
|
||||||
}
|
}
|
||||||
QTableView::item:hover
|
QTableView::item:hover
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue