refactor:重构AlarmEvent模块代码结构(建立AlarmEventUtils将所有辅助功能类放入其中)
This commit is contained in:
parent
78144017d3
commit
c99d726b72
|
|
@ -52,6 +52,7 @@ set(H_HEADER_FILES
|
||||||
include/alarmEventMainDialog.h
|
include/alarmEventMainDialog.h
|
||||||
include/alarmEventDataView.h
|
include/alarmEventDataView.h
|
||||||
include/alarmEventRealTimeDock.h
|
include/alarmEventRealTimeDock.h
|
||||||
|
include/alarmEventUtils.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(CPP_SOURCE_FILES
|
set(CPP_SOURCE_FILES
|
||||||
|
|
@ -85,6 +86,7 @@ set(CPP_SOURCE_FILES
|
||||||
source/alarmEventMainDialog.cpp
|
source/alarmEventMainDialog.cpp
|
||||||
source/alarmEventDataView.cpp
|
source/alarmEventDataView.cpp
|
||||||
source/alarmEventRealTimeDock.cpp
|
source/alarmEventRealTimeDock.cpp
|
||||||
|
source/alarmEventUtils.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set(UI_FILES
|
set(UI_FILES
|
||||||
|
|
|
||||||
|
|
@ -1,42 +1,12 @@
|
||||||
#ifndef ALARMEVENTDATAVIEW_H
|
#ifndef ALARMEVENTDATAVIEW_H
|
||||||
#define ALARMEVENTDATAVIEW_H
|
#define ALARMEVENTDATAVIEW_H
|
||||||
|
|
||||||
#include "alarmEventGlobal.h"
|
#include "alarmEventUtils.h"
|
||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include <QTableView>
|
#include <QTableView>
|
||||||
#include <QAbstractTableModel>
|
#include <QAbstractTableModel>
|
||||||
#include <QStyledItemDelegate>
|
#include <QStyledItemDelegate>
|
||||||
|
|
||||||
class AlarmEventDataFilter
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AlarmEventDataFilter();
|
|
||||||
|
|
||||||
void setTimeRange(const QDateTime& start, const QDateTime& end) {m_startTime = start; m_endTime = end;}
|
|
||||||
void setStationFilter(const QString& station) {m_station = station;}
|
|
||||||
void setBayFilter(const QString& bay) {m_bay = bay;}
|
|
||||||
void setTypeFilter(int type) {m_type = type;}
|
|
||||||
void setSeverityFilter(const QString& severity) {m_severity = severity;}
|
|
||||||
void setDescriptionFilter(const QString& description) {m_description = description;}
|
|
||||||
void setConfirmStatusFilter(int status) {m_status = status;}
|
|
||||||
|
|
||||||
bool matches(const EventData& event);
|
|
||||||
void clear();
|
|
||||||
QVector<EventData> apply(const QVector<EventData>& events);
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool isEmpty();
|
|
||||||
|
|
||||||
QDateTime m_startTime;
|
|
||||||
QDateTime m_endTime;
|
|
||||||
QString m_station;
|
|
||||||
QString m_bay;
|
|
||||||
int m_type;
|
|
||||||
QString m_severity;
|
|
||||||
QString m_description;
|
|
||||||
int m_status;
|
|
||||||
};
|
|
||||||
|
|
||||||
class QTimer;
|
class QTimer;
|
||||||
class AlarmEventDataModel : public QAbstractTableModel
|
class AlarmEventDataModel : public QAbstractTableModel
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,54 @@
|
||||||
|
#ifndef ALARMEVENTUTILS_H
|
||||||
|
#define ALARMEVENTUTILS_H
|
||||||
|
|
||||||
|
#include "alarmEventGlobal.h"
|
||||||
|
|
||||||
|
class AlarmEventDataFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AlarmEventDataFilter();
|
||||||
|
|
||||||
|
void setTimeRange(const QDateTime& start, const QDateTime& end) {m_startTime = start; m_endTime = end;}
|
||||||
|
void setStationFilter(const QString& station) {m_station = station;}
|
||||||
|
void setBayFilter(const QString& bay) {m_bay = bay;}
|
||||||
|
void setTypeFilter(int type) {m_type = type;}
|
||||||
|
void setSeverityFilter(const QString& severity) {m_severity = severity;}
|
||||||
|
void setDescriptionFilter(const QString& description) {m_description = description;}
|
||||||
|
void setConfirmStatusFilter(int status) {m_status = status;}
|
||||||
|
|
||||||
|
bool matches(const EventData& event);
|
||||||
|
void clear();
|
||||||
|
QVector<EventData> apply(const QVector<EventData>& events);
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool isEmpty();
|
||||||
|
|
||||||
|
QDateTime m_startTime;
|
||||||
|
QDateTime m_endTime;
|
||||||
|
QString m_station;
|
||||||
|
QString m_bay;
|
||||||
|
int m_type;
|
||||||
|
QString m_severity;
|
||||||
|
QString m_description;
|
||||||
|
int m_status;
|
||||||
|
};
|
||||||
|
|
||||||
|
class AlarmEventCache
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AlarmEventCache();
|
||||||
|
|
||||||
|
void setMaxSize(int maxSize);
|
||||||
|
int getMaxSize() const {return m_maxSize;}
|
||||||
|
|
||||||
|
void addEvent(const EventData& event);
|
||||||
|
void clear();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void trimToSize();
|
||||||
|
|
||||||
|
int m_maxSize;
|
||||||
|
QVector<EventData> m_events;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
@ -7,84 +7,6 @@
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
//#include <QApplication>
|
//#include <QApplication>
|
||||||
|
|
||||||
///////------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;
|
|
||||||
}
|
|
||||||
|
|
||||||
QVector<EventData> AlarmEventDataFilter::apply(const QVector<EventData>& events)
|
|
||||||
{
|
|
||||||
if(isEmpty())
|
|
||||||
return events;
|
|
||||||
|
|
||||||
QVector<EventData> filteredEvents;
|
|
||||||
filteredEvents.reserve(events.size()); //分配好内存,防止后面执行append时造成的多次扩容开销
|
|
||||||
|
|
||||||
for(const EventData& event : events)
|
|
||||||
{
|
|
||||||
if(matches(event))
|
|
||||||
filteredEvents.append(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
return filteredEvents; //RVO + QT的隐式共享(QVector),不用担心开销
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AlarmEventDataFilter::isEmpty()
|
|
||||||
{
|
|
||||||
return !m_startTime.isValid() &&
|
|
||||||
!m_endTime.isValid() &&
|
|
||||||
m_station.isEmpty() &&
|
|
||||||
m_bay.isEmpty() &&
|
|
||||||
m_type == -1 &&
|
|
||||||
m_severity.isEmpty() &&
|
|
||||||
m_description.isEmpty() &&
|
|
||||||
m_status == -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
///////------AlarmEventDataModel-----
|
///////------AlarmEventDataModel-----
|
||||||
AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent)
|
AlarmEventDataModel::AlarmEventDataModel(AlarmDataMode mode, QObject* parent)
|
||||||
: QAbstractTableModel(parent)
|
: QAbstractTableModel(parent)
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent)
|
||||||
connect(m_animationExpand, &QPropertyAnimation::finished, this, [this]{m_isInAnimationExpand = false;});
|
connect(m_animationExpand, &QPropertyAnimation::finished, this, [this]{m_isInAnimationExpand = false;});
|
||||||
|
|
||||||
m_animationAlert = new QPropertyAnimation(this, "alertWidgetBGColorAlpha", this);
|
m_animationAlert = new QPropertyAnimation(this, "alertWidgetBGColorAlpha", this);
|
||||||
m_animationAlert->setDuration(3000);
|
m_animationAlert->setDuration(2500);
|
||||||
m_animationAlert->setStartValue(0.0);
|
m_animationAlert->setStartValue(0.0);
|
||||||
m_animationAlert->setEndValue(1.0);
|
m_animationAlert->setEndValue(1.0);
|
||||||
m_animationAlert->setLoopCount(-1);//无限循环
|
m_animationAlert->setLoopCount(-1);//无限循环
|
||||||
|
|
@ -151,7 +151,7 @@ void AlarmEventRealTimeDock::updateAlertWidgetBGColorAlpha()
|
||||||
{
|
{
|
||||||
// 计算透明度 (从0到200再到0)
|
// 计算透明度 (从0到200再到0)
|
||||||
int alpha = 200 * (1 - qAbs(2 * m_alertWidgetBGColorAlpha - 1));
|
int alpha = 200 * (1 - qAbs(2 * m_alertWidgetBGColorAlpha - 1));
|
||||||
if(alpha == 1) //1表示不透,具体原因为探究,先舍弃该值
|
if(alpha == 1) //1表示不透,具体原因未探究,舍弃该值
|
||||||
return;
|
return;
|
||||||
QString styleSheet = QString(
|
QString styleSheet = QString(
|
||||||
"background-color: qradialgradient("
|
"background-color: qradialgradient("
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,111 @@
|
||||||
|
#include "alarmEventUtils.h"
|
||||||
|
|
||||||
|
///////------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;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVector<EventData> AlarmEventDataFilter::apply(const QVector<EventData>& events)
|
||||||
|
{
|
||||||
|
if(isEmpty())
|
||||||
|
return events;
|
||||||
|
|
||||||
|
QVector<EventData> filteredEvents;
|
||||||
|
filteredEvents.reserve(events.size()); //分配好内存,防止后面执行append时造成的多次扩容开销
|
||||||
|
|
||||||
|
for(const EventData& event : events)
|
||||||
|
{
|
||||||
|
if(matches(event))
|
||||||
|
filteredEvents.append(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return filteredEvents; //RVO + QT的隐式共享(QVector),不用担心开销
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AlarmEventDataFilter::isEmpty()
|
||||||
|
{
|
||||||
|
return !m_startTime.isValid() &&
|
||||||
|
!m_endTime.isValid() &&
|
||||||
|
m_station.isEmpty() &&
|
||||||
|
m_bay.isEmpty() &&
|
||||||
|
m_type == -1 &&
|
||||||
|
m_severity.isEmpty() &&
|
||||||
|
m_description.isEmpty() &&
|
||||||
|
m_status == -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////------AlarmEventDataFilter-----
|
||||||
|
AlarmEventCache::AlarmEventCache()
|
||||||
|
: m_maxSize(10000)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void AlarmEventCache::trimToSize()
|
||||||
|
{
|
||||||
|
if(m_events.size() > m_maxSize)
|
||||||
|
{
|
||||||
|
int removeCount = m_events.size() - m_maxSize;
|
||||||
|
for(int i = 0; i < removeCount; ++i)
|
||||||
|
m_events.removeFirst();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlarmEventCache::setMaxSize(int maxSize)
|
||||||
|
{
|
||||||
|
m_maxSize = maxSize;
|
||||||
|
trimToSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlarmEventCache::clear()
|
||||||
|
{
|
||||||
|
m_events.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
void AlarmEventCache::addEvent(const EventData& event)
|
||||||
|
{
|
||||||
|
m_events.append(event);
|
||||||
|
trimToSize();
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue