refactor:重构AlarmEvent模块代码结构(建立AlarmEventUtils将所有辅助功能类放入其中)
This commit is contained in:
parent
78144017d3
commit
c99d726b72
|
|
@ -52,6 +52,7 @@ set(H_HEADER_FILES
|
|||
include/alarmEventMainDialog.h
|
||||
include/alarmEventDataView.h
|
||||
include/alarmEventRealTimeDock.h
|
||||
include/alarmEventUtils.h
|
||||
)
|
||||
|
||||
set(CPP_SOURCE_FILES
|
||||
|
|
@ -85,6 +86,7 @@ set(CPP_SOURCE_FILES
|
|||
source/alarmEventMainDialog.cpp
|
||||
source/alarmEventDataView.cpp
|
||||
source/alarmEventRealTimeDock.cpp
|
||||
source/alarmEventUtils.cpp
|
||||
)
|
||||
|
||||
set(UI_FILES
|
||||
|
|
|
|||
|
|
@ -1,42 +1,12 @@
|
|||
#ifndef ALARMEVENTDATAVIEW_H
|
||||
#define ALARMEVENTDATAVIEW_H
|
||||
|
||||
#include "alarmEventGlobal.h"
|
||||
#include "alarmEventUtils.h"
|
||||
#include <QWidget>
|
||||
#include <QTableView>
|
||||
#include <QAbstractTableModel>
|
||||
#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 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 <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(AlarmDataMode mode, QObject* parent)
|
||||
: QAbstractTableModel(parent)
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent)
|
|||
connect(m_animationExpand, &QPropertyAnimation::finished, this, [this]{m_isInAnimationExpand = false;});
|
||||
|
||||
m_animationAlert = new QPropertyAnimation(this, "alertWidgetBGColorAlpha", this);
|
||||
m_animationAlert->setDuration(3000);
|
||||
m_animationAlert->setDuration(2500);
|
||||
m_animationAlert->setStartValue(0.0);
|
||||
m_animationAlert->setEndValue(1.0);
|
||||
m_animationAlert->setLoopCount(-1);//无限循环
|
||||
|
|
@ -151,7 +151,7 @@ void AlarmEventRealTimeDock::updateAlertWidgetBGColorAlpha()
|
|||
{
|
||||
// 计算透明度 (从0到200再到0)
|
||||
int alpha = 200 * (1 - qAbs(2 * m_alertWidgetBGColorAlpha - 1));
|
||||
if(alpha == 1) //1表示不透,具体原因为探究,先舍弃该值
|
||||
if(alpha == 1) //1表示不透,具体原因未探究,舍弃该值
|
||||
return;
|
||||
QString styleSheet = QString(
|
||||
"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