diff --git a/include/alarmEventDataView.h b/include/alarmEventDataView.h index d3d5bd8..c6d943c 100644 --- a/include/alarmEventDataView.h +++ b/include/alarmEventDataView.h @@ -22,8 +22,11 @@ public: bool matches(const EventData& event); void clear(); + QVector apply(const QVector& events); private: + bool isEmpty(); + QDateTime m_startTime; QDateTime m_endTime; QString m_station; diff --git a/source/alarmEventDataView.cpp b/source/alarmEventDataView.cpp index 25c8965..d4784fc 100644 --- a/source/alarmEventDataView.cpp +++ b/source/alarmEventDataView.cpp @@ -55,6 +55,35 @@ void AlarmEventDataFilter::clear() m_status = -1; } +QVector AlarmEventDataFilter::apply(const QVector& events) +{ + if(isEmpty()) + return events; + + QVector 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(QObject* parent)