2025-09-18 15:50:18 +08:00
|
|
|
#include "alarmEventDataView.h"
|
|
|
|
|
#include <QHeaderView>
|
|
|
|
|
#include <QVBoxLayout>
|
2025-09-19 17:45:52 +08:00
|
|
|
#include <QPainter>
|
2025-09-18 15:50:18 +08:00
|
|
|
|
2025-09-19 17:45:52 +08:00
|
|
|
///////------AlarmEventDataModel-----
|
|
|
|
|
AlarmEventDataModel::AlarmEventDataModel(QObject* parent)
|
|
|
|
|
: QAbstractTableModel(parent)
|
|
|
|
|
{
|
|
|
|
|
iniHeaderData();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AlarmEventDataModel::~AlarmEventDataModel()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
QModelIndex AlarmEventDataModel::index(int row, int column, const QModelIndex& parent) const
|
|
|
|
|
{
|
|
|
|
|
if(!hasIndex(row, column, parent))
|
|
|
|
|
return QModelIndex();
|
|
|
|
|
|
|
|
|
|
if(column > m_headerData.count())
|
|
|
|
|
return QModelIndex();
|
|
|
|
|
|
|
|
|
|
return createIndex(row, column);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QVariant AlarmEventDataModel::data(const QModelIndex& index, int role) const
|
|
|
|
|
{
|
|
|
|
|
if(index.isValid())
|
|
|
|
|
return QVariant();
|
|
|
|
|
|
|
|
|
|
int row = index.row();
|
|
|
|
|
int col = index.column();
|
|
|
|
|
int globalRow = (m_paginationInfo.currentPage - 1) * m_paginationInfo.entriesPerpage + row;
|
2025-10-10 10:06:54 +08:00
|
|
|
const EventData& event = m_displayEvents.at(row);
|
|
|
|
|
//EventData event = m_displayEvents[row];
|
2025-09-19 17:45:52 +08:00
|
|
|
|
|
|
|
|
switch (role)
|
|
|
|
|
{
|
|
|
|
|
case Qt::DisplayRole:
|
|
|
|
|
{
|
2025-10-10 10:06:54 +08:00
|
|
|
switch(col)
|
|
|
|
|
{
|
|
|
|
|
case Index:
|
2025-09-19 17:45:52 +08:00
|
|
|
return QString::number(globalRow + 1);
|
2025-10-10 10:06:54 +08:00
|
|
|
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:
|
2025-09-19 17:45:52 +08:00
|
|
|
{
|
2025-10-10 10:06:54 +08:00
|
|
|
if(event.status < 3)
|
|
|
|
|
return QString("未确认");
|
|
|
|
|
else
|
|
|
|
|
return QString("已确认");
|
|
|
|
|
}
|
2025-09-19 17:45:52 +08:00
|
|
|
}
|
|
|
|
|
}
|
2025-10-10 10:06:54 +08:00
|
|
|
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);
|
|
|
|
|
}
|
2025-09-19 17:45:52 +08:00
|
|
|
case Qt::TextAlignmentRole:
|
|
|
|
|
return Qt::AlignCenter; //居中展示
|
|
|
|
|
default:
|
|
|
|
|
return QVariant();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
QVariant AlarmEventDataModel::headerData(int section, Qt::Orientation orientation, int role) const
|
|
|
|
|
{
|
|
|
|
|
if(orientation == Qt::Horizontal && role == Qt::DisplayRole)
|
|
|
|
|
return m_headerData.at(section).text;
|
|
|
|
|
|
|
|
|
|
return QAbstractItemModel::headerData(section, orientation, role);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int AlarmEventDataModel::rowCount(const QModelIndex& parent) const
|
|
|
|
|
{
|
2025-10-10 10:06:54 +08:00
|
|
|
return m_displayEvents.count();
|
2025-09-19 17:45:52 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int AlarmEventDataModel::columnCount(const QModelIndex& parent) const
|
|
|
|
|
{
|
|
|
|
|
return m_headerData.isEmpty() ? 0 : m_headerData.count();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Qt::ItemFlags AlarmEventDataModel::flags(const QModelIndex& index) const
|
|
|
|
|
{
|
|
|
|
|
if(!index.isValid())
|
|
|
|
|
return Qt::NoItemFlags;
|
|
|
|
|
|
|
|
|
|
Qt::ItemFlags flags = QAbstractTableModel::flags(index);
|
|
|
|
|
flags |= Qt::ItemIsEditable; //不可编辑
|
|
|
|
|
|
|
|
|
|
return flags;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AlarmEventDataModel::iniHeaderData()
|
|
|
|
|
{
|
2025-10-10 10:06:54 +08:00
|
|
|
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, 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, Severity));
|
|
|
|
|
m_headerData.emplace_back(SectionData("确认状态", 150, Status));
|
|
|
|
|
m_headerData.emplace_back(SectionData("操作", 300, Operation));
|
2025-09-19 17:45:52 +08:00
|
|
|
}
|
|
|
|
|
|
2025-09-24 12:10:51 +08:00
|
|
|
void AlarmEventDataModel::updateCurPageData()
|
|
|
|
|
{
|
2025-10-13 17:31:50 +08:00
|
|
|
beginResetModel();
|
|
|
|
|
|
2025-10-10 10:06:54 +08:00
|
|
|
m_displayEvents.clear();
|
2025-09-24 12:10:51 +08:00
|
|
|
|
2025-10-13 17:31:50 +08:00
|
|
|
endResetModel();
|
2025-09-24 12:10:51 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AlarmEventDataModel::updateTotalCount()
|
|
|
|
|
{}
|
|
|
|
|
|
2025-10-13 17:31:50 +08:00
|
|
|
|
|
|
|
|
///////------AlarmEventDataFilter-----
|
|
|
|
|
AlarmEventDataFilter::AlarmEventDataFilter()
|
|
|
|
|
{
|
|
|
|
|
m_type = -1;
|
|
|
|
|
m_status = -1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool AlarmEventDataFilter::matches(const EventData& event)
|
|
|
|
|
{
|
|
|
|
|
QDateTime eventTime = QDateTime::fromMSecsSinceEpoch(event.timestamp);
|
|
|
|
|
if(m_startTime.isValid() && eventTime < m_startTime)
|
|
|
|
|
return false;
|
|
|
|
|
if(m_endTime.isValid() && eventTime > m_endTime)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if(!m_station.isEmpty() && event.stationName != m_station)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if(!m_bay.isEmpty() && event.bayName != m_bay)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if(event.type != m_type)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if(!m_severity.isEmpty() && event.severity != m_severity)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if(!m_description.isEmpty() && event.description != m_description)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
if(event.status != m_status)
|
|
|
|
|
return false;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AlarmEventDataFilter::clear()
|
|
|
|
|
{
|
|
|
|
|
m_startTime = QDateTime();
|
|
|
|
|
m_endTime = QDateTime();
|
|
|
|
|
m_station.clear();
|
|
|
|
|
m_bay.clear();
|
|
|
|
|
m_type = -1;
|
|
|
|
|
m_severity.clear();
|
|
|
|
|
m_description.clear();
|
|
|
|
|
m_status = -1;
|
|
|
|
|
}
|
|
|
|
|
|
2025-09-19 17:45:52 +08:00
|
|
|
///////------AlarmEventDataDelegate-----
|
|
|
|
|
AlarmEventDataDelegate::AlarmEventDataDelegate(QTableView* view, QObject* parent)
|
|
|
|
|
: QStyledItemDelegate(parent)
|
|
|
|
|
,m_tableView(view)
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
AlarmEventDataDelegate::~AlarmEventDataDelegate()
|
|
|
|
|
{}
|
|
|
|
|
|
|
|
|
|
void AlarmEventDataDelegate::paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
|
|
|
|
|
{
|
|
|
|
|
//根据行号设置交替颜色
|
|
|
|
|
QStyleOptionViewItem opt = option;
|
|
|
|
|
initStyleOption(&opt, index);
|
|
|
|
|
if((index.row() + 1) % 2 == 0)
|
|
|
|
|
painter->fillRect(opt.rect, QColor(11, 26, 33, 200));
|
|
|
|
|
else
|
|
|
|
|
painter->fillRect(opt.rect, QColor(11, 26, 33, 0));
|
|
|
|
|
|
|
|
|
|
//绘制单元格边框(只绘制右边框,每行的最后一个单元格不绘制)
|
|
|
|
|
if(m_tableView)
|
|
|
|
|
{
|
|
|
|
|
painter->save();
|
|
|
|
|
QPen pen(QColor(60,60,60), 1);
|
|
|
|
|
painter->setPen(pen);
|
|
|
|
|
if(index.column() != m_tableView->model()->columnCount() - 1)
|
|
|
|
|
painter->drawLine(opt.rect.topRight(), opt.rect.bottomRight());
|
|
|
|
|
painter->restore();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//绘制默认内容
|
|
|
|
|
QStyledItemDelegate::paint(painter, option, index);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
///////------AlarmEventDataView-----
|
2025-09-18 15:50:18 +08:00
|
|
|
AlarmEventDataView::AlarmEventDataView(QWidget* parent)
|
|
|
|
|
: QWidget(parent)
|
|
|
|
|
{
|
|
|
|
|
m_tableView = new QTableView(this);
|
|
|
|
|
m_tableView->verticalHeader()->setVisible(false);
|
|
|
|
|
m_tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
|
2025-10-13 17:31:50 +08:00
|
|
|
m_tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
|
2025-09-18 15:50:18 +08:00
|
|
|
m_tableView->setShowGrid(false);
|
|
|
|
|
//m_tableView->setStyleSheet("QHeaderView{background-color: rgb(40, 40, 40);} QHeaderView::section{background-color:transparent;}");
|
|
|
|
|
|
2025-09-19 17:45:52 +08:00
|
|
|
m_tableModel = new AlarmEventDataModel(this);
|
|
|
|
|
m_tableView->setModel(m_tableModel);
|
2025-10-10 10:06:54 +08:00
|
|
|
//设置表头
|
|
|
|
|
const QVector<AlarmEventDataModel::SectionData> headerData = m_tableModel->headerData();
|
|
|
|
|
for(int i = 0; i < headerData.size(); i++)
|
|
|
|
|
{
|
|
|
|
|
if(headerData.at(i).width == -1)
|
|
|
|
|
m_tableView->horizontalHeader()->setSectionResizeMode(i, QHeaderView::Stretch);
|
|
|
|
|
else
|
|
|
|
|
m_tableView->setColumnWidth(i, headerData.at(i).width);
|
|
|
|
|
}
|
2025-09-19 17:45:52 +08:00
|
|
|
|
|
|
|
|
m_delegate = new AlarmEventDataDelegate(m_tableView, this);
|
|
|
|
|
m_tableView->setItemDelegate(m_delegate);
|
|
|
|
|
|
2025-09-18 15:50:18 +08:00
|
|
|
m_vLayout = new QVBoxLayout(this);
|
|
|
|
|
m_vLayout->setSpacing(0);
|
|
|
|
|
m_vLayout->setContentsMargins(0, 0, 0, 0);
|
|
|
|
|
m_vLayout->addWidget(m_tableView);
|
|
|
|
|
this->setLayout(m_vLayout);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AlarmEventDataView::~AlarmEventDataView()
|
|
|
|
|
{}
|