feat:完成实时报警的动态配置功能

This commit is contained in:
duanshengchao 2025-12-02 18:37:57 +08:00
parent 431a39ef83
commit f3f08af3f9
15 changed files with 305 additions and 24 deletions

View File

@ -86,6 +86,7 @@ set(CPP_SOURCE_FILES
source/customCalendarWidget.cpp
source/dateTimeSelectionPanel.cpp
source/httpRequestManager.cpp
source/alarmEventGlobal.cpp
source/alarmEventMainDialog.cpp
source/alarmEventDataView.cpp
source/alarmEventRealTimeDock.cpp

View File

@ -0,0 +1,41 @@
#ifndef ALARMCONFIGDIALOG_H
#define ALARMCONFIGDIALOG_H
#include <QDialog>
#include "alarmEventGlobal.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class alarmEventConfigDialog;
}
QT_END_NAMESPACE
class AlarmEventConfigDialog : public QDialog
{
Q_OBJECT
public:
AlarmEventConfigDialog(QWidget *parent = nullptr);
~AlarmEventConfigDialog();
signals:
void sgl_hide();
//void sgl_configFinish(const AlarmConfigurationResults&);
public slots:
void onBtnClicked_tabBtn();
void onBtnClicked_confirm();
void onBtnClicked_cancle();
protected:
void showEvent(QShowEvent*);
private:
void initialize();
Ui::alarmEventConfigDialog* ui;
QPushButton* m_curActiveTab;
//AlarmConfigurationResults m_cfgResults;
};
#endif

View File

@ -73,4 +73,26 @@ struct EventData
}
};
struct AlarmConfigurationResults
{
//级别选择
bool level_notify = true;
bool level_warining = true;
bool level_abnormal = true;
bool level_accident = true;
//类型选择
bool type_hard = true;
bool type_platformSoft = true;
bool type_appSoft = true;
//提示行为
bool notify_sound = true;
bool notify_autoPop = true;
//自动弹窗级别
bool autoPop_nofity = false;
bool autoPop_warining = false;
bool autoPop_abnormal = false;
bool autoPop_accident = true;
};
extern AlarmConfigurationResults g_alarmCfgResults;
#endif

View File

@ -28,6 +28,7 @@ public:
signals:
void sgl_hide();
void openConfigDialog();
protected:
void showEvent(QShowEvent* event) override;

View File

@ -35,13 +35,16 @@ public:
signals:
void alertWidgetBGColorAlphaChanged(float value);
void viewAllRealTimeEvents();
void openConfigDialog();
public slots:
void onBtnClicked_open();
void onBtnClicked_close();
void onBtnClicked_confirmAll();
void onBtnClicked_checkAll();
void onBtnClicked_setting();
void onSIG_receivedNewAlarm(const EventData& event);
//void onSIG_configFinish(const AlarmConfigurationResults&);
private:
void expand();
@ -63,6 +66,7 @@ private:
QString m_alertWidgetStyleSheet;
QString m_curState;
AlarmDataStatics m_alarmDataStatics;
AlarmConfigurationResults m_cfgResults;
};
#endif

View File

@ -24,6 +24,7 @@ class DataPanel;
class dpConfigurationDialog;
class AlarmEventRealTimeDock;
class AlarmEventMainDialog;
class AlarmEventConfigDialog;
namespace dashboardFrame {
enum frameType
@ -96,6 +97,7 @@ public slots:
void onSignal_viewHistoricalData(QDateTime);
void onSignal_viewAllRealTimeEvents();
void onSignal_openAlarmEventCfgDialog();
private:
Ui::dashboardFrame* ui;
@ -119,6 +121,7 @@ private:
dpConfigurationDialog* m_pPanelConfigurationDialog;
AlarmEventRealTimeDock* m_pAlarmEventRealTimeDock;
AlarmEventMainDialog* m_pAlarmEventMainDialog;
AlarmEventConfigDialog* m_pAlarmEventConfigDialog;
QTimer* m_pTimer_RealTime;
};

View File

@ -0,0 +1,132 @@
#include "alarmEventConfigDialog.h"
#include "ui_alarmEventConfigDialog.h"
AlarmEventConfigDialog::AlarmEventConfigDialog(QWidget *parent)
: QDialog(parent)
, ui(new Ui::alarmEventConfigDialog)
, m_curActiveTab(nullptr)
{
ui->setupUi(this);
setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus);
setAttribute(Qt::WA_TranslucentBackground);
initialize();
}
AlarmEventConfigDialog::~AlarmEventConfigDialog()
{
delete ui;
}
void AlarmEventConfigDialog::showEvent(QShowEvent* event)
{
//级别选择
ui->level_notify->setChecked(g_alarmCfgResults.level_notify);
ui->level_warning->setChecked(g_alarmCfgResults.level_warining);
ui->level_abnormal->setChecked(g_alarmCfgResults.level_abnormal);
ui->level_accident->setChecked(g_alarmCfgResults.level_accident);
//类型选择
ui->type_hard->setChecked(g_alarmCfgResults.type_hard);
ui->type_platformSoft->setChecked(g_alarmCfgResults.type_platformSoft);
ui->type_appSoft->setChecked(g_alarmCfgResults.type_appSoft);
//提示行为
ui->switch_sound->setChecked(g_alarmCfgResults.notify_sound);
ui->switch_autoPop->setChecked(g_alarmCfgResults.notify_autoPop);
//需要自动弹窗的事件级别
ui->pop_notify->setChecked(g_alarmCfgResults.autoPop_nofity);
ui->pop_warning->setChecked(g_alarmCfgResults.autoPop_warining);
ui->pop_abnormal->setChecked(g_alarmCfgResults.autoPop_abnormal);
ui->pop_accident->setChecked(g_alarmCfgResults.autoPop_accident);
ui->tabDataFilter->click();
}
void AlarmEventConfigDialog::initialize()
{
ui->stackedWidget->setCurrentIndex(0);
ui->tabDataFilter->setProperty("index", 0);
connect(ui->tabDataFilter, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_tabBtn);
ui->tabDataSource->setProperty("index", 1);
connect(ui->tabDataSource, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_tabBtn);
connect(ui->btnConfirm, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_confirm);
connect(ui->btnCancle, &QPushButton::clicked, this, &AlarmEventConfigDialog::onBtnClicked_cancle);
}
void AlarmEventConfigDialog::onBtnClicked_tabBtn()
{
QPushButton* pTab = qobject_cast<QPushButton*>(sender());
if(pTab == m_curActiveTab)
return;
if(m_curActiveTab)
{
m_curActiveTab->setStyleSheet("QPushButton\n"
"{\n"
"color: rgb(250, 250, 250);\n"
"font: 700 12pt \"黑体\";\n"
"border:0px;\n"
"background-color:transparent;\n"
"}\n"
"QPushButton:hover\n"
"{\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
"}");
}
if(pTab)
{
pTab->setStyleSheet("QPushButton\n"
"{\n"
"color: rgb(250, 250, 250);\n"
"font: 700 12pt \"黑体\";\n"
"border:1px solid rgb(200,200,200);\n"
"border-bottom:0px;\n"
"background-color:rgba(36,43,50, 250);\n"
"}\n"
"QPushButton:hover\n"
"{\n"
"}\n"
"QPushButton:pressed\n"
"{\n"
"}");
int nIndex = pTab->property("index").toInt();
ui->stackedWidget->setCurrentIndex(nIndex);
}
m_curActiveTab = pTab;
}
void AlarmEventConfigDialog::onBtnClicked_confirm()
{
//级别选择
g_alarmCfgResults.level_notify = ui->level_notify->isChecked();
g_alarmCfgResults.level_warining = ui->level_warning->isChecked();
g_alarmCfgResults.level_abnormal = ui->level_abnormal->isChecked();
g_alarmCfgResults.level_accident = ui->level_accident->isChecked();
//类型选择
g_alarmCfgResults.type_hard = ui->type_hard->isChecked();
g_alarmCfgResults.type_platformSoft = ui->type_platformSoft->isChecked();
g_alarmCfgResults.type_appSoft = ui->type_appSoft->isChecked();
//提示行为
g_alarmCfgResults.notify_sound = ui->switch_sound->isChecked();
g_alarmCfgResults.notify_autoPop = ui->switch_autoPop->isChecked();
//需要自动弹窗的事件级别
g_alarmCfgResults.autoPop_nofity = ui->pop_notify->isChecked();
g_alarmCfgResults.autoPop_warining = ui->pop_warning->isChecked();
g_alarmCfgResults.autoPop_abnormal = ui->pop_abnormal->isChecked();
g_alarmCfgResults.autoPop_accident = ui->pop_accident->isChecked();
//emit sgl_configFinish(g_alarmCfgResults);
hide();
emit sgl_hide();
}
void AlarmEventConfigDialog::onBtnClicked_cancle()
{
hide();
emit sgl_hide();
}

View File

@ -308,16 +308,26 @@ void AlarmEventDataModel::onTimeoutSimulateData()
event.bayName = QString("间隔") + QString::number(randomInt);
event.description = "";
event.type = 5;
QString severity = QString("预警");
if(randomInt == 0)
severity = QString("告知");
{
event.priority = 1;
event.severity = QString("告知");
}
else if(randomInt == 1)
severity = QString("预警");
{
event.priority = 4;
event.severity = QString("预警");
}
else if(randomInt == 2)
severity = QString("异常");
{
event.priority = 6;
event.severity = QString("异常");
}
else if(randomInt == 3)
severity = QString("事故");
event.severity = severity;
{
event.priority = 7;
event.severity = QString("事故");
}
event.status = 0;
onRealTimeEventReceived(event);
}
@ -334,6 +344,29 @@ void AlarmEventDataModel::onRealTimeEventReceived(const EventData& event)
return;
}
//按级别过滤事件
//告知
if(event.priority == 1)
{
//qDebug() << g_alarmCfgResults.level_notify;
if(!g_alarmCfgResults.level_notify)
return;
}
//预警
else if(event.priority == 4)
{
//qDebug() << g_alarmCfgResults.level_warining;
if(!g_alarmCfgResults.level_warining)
return;
}
//事故
else if(event.priority == 7)
{
//qDebug() << g_alarmCfgResults.level_accident;
if(!g_alarmCfgResults.level_accident)
return;
}
beginResetModel();
//插入数据之前,先判断当前是否达到最大显示条目,达到的话删除最靠前(时间)的条目

View File

@ -0,0 +1,3 @@
#include "alarmEventGlobal.h"
AlarmConfigurationResults g_alarmCfgResults;

View File

@ -122,7 +122,7 @@ void AlarmEventMainDialog::hideTransparentMask()
m_pTransparentMask->hide();
}
void AlarmEventMainDialog::showMessageDialog(MessageDialogType type,const QString& strTitle,const QString& strContent)
void AlarmEventMainDialog::showMessageDialog(MessageDialogType type, const QString& strTitle, const QString& strContent)
{
if(m_pMessageDialog == nullptr)
{
@ -147,6 +147,7 @@ void AlarmEventMainDialog::setMode(AlarmDataMode mode)
if(mode == Historical_Unconfirmed)
{
ui->label_WindowlTitle->setText("实时事件");
ui->btnConfirmAll->setVisible(true);
ui->conboBox_confirmStatus->setEnabled(false);
ui->conboBox_confirmStatus->setCurrentIndex(1);
m_eventFilter.setConfirmStatusFilter(0);
@ -154,6 +155,7 @@ void AlarmEventMainDialog::setMode(AlarmDataMode mode)
else if(mode == Historical_All)
{
ui->label_WindowlTitle->setText("历史事件");
ui->btnConfirmAll->setVisible(false);
ui->conboBox_confirmStatus->setEnabled(true);
ui->conboBox_confirmStatus->setCurrentIndex(0);
m_eventFilter.setConfirmStatusFilter(-1); //-1表示所有事件(确认+未确认)

View File

@ -44,6 +44,7 @@ AlarmEventRealTimeDock::AlarmEventRealTimeDock(QWidget* parent)
connect(ui->btnClose, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_close);
connect(ui->btnConfirmAll, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_confirmAll);
connect(ui->btnCheckAll, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_checkAll);
connect(ui->btnSetting, &QPushButton::clicked, this, &AlarmEventRealTimeDock::onBtnClicked_setting);
/*if(parent)
{
@ -118,6 +119,8 @@ void AlarmEventRealTimeDock::startAlarmAlert()
if(m_isInAnimationAlert || m_curState == "expand")
return;
//播放音频(音频长度要和动画时间一致)
//if(g_alarmCfgResults.notify_sound)
m_animationAlert->start();
m_isInAnimationAlert = true;
}
@ -194,8 +197,27 @@ void AlarmEventRealTimeDock::onBtnClicked_checkAll()
emit viewAllRealTimeEvents();
}
void AlarmEventRealTimeDock::onBtnClicked_setting()
{
emit openConfigDialog();
}
void AlarmEventRealTimeDock::onSIG_receivedNewAlarm(const EventData& event)
{
//判断是否需要自动弹窗
if(g_alarmCfgResults.notify_autoPop && m_curState == "collapse")
{
//告知
if(event.priority == 1 && g_alarmCfgResults.autoPop_nofity)
onBtnClicked_open();
//预警
else if(event.priority == 4 && g_alarmCfgResults.autoPop_warining)
onBtnClicked_open();
//事故
else if(event.priority == 7 && g_alarmCfgResults.autoPop_accident)
onBtnClicked_open();
}
startAlarmAlert();
m_alarmDataStatics.allCount++;

View File

@ -15,6 +15,7 @@
#include "util/TimeLine/timeLineWidget.h"
#include "alarmEventRealTimeDock.h"
#include "alarmEventMainDialog.h"
#include "alarmEventConfigDialog.h"
#include <QKeyEvent>
#include <QMenu>
@ -37,6 +38,7 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType
, m_pPanelConfigurationDialog(nullptr)
, m_pAlarmEventRealTimeDock(nullptr)
, m_pAlarmEventMainDialog(nullptr)
, m_pAlarmEventConfigDialog(nullptr)
{
ui->setupUi(this);
setAcceptDrops(true);
@ -49,6 +51,16 @@ DashboardFrame::DashboardFrame(const QString& strName, dashboardFrame::frameType
{
m_pAlarmEventRealTimeDock = new AlarmEventRealTimeDock(this);
connect(m_pAlarmEventRealTimeDock, &AlarmEventRealTimeDock::viewAllRealTimeEvents, this, &DashboardFrame::onSignal_viewAllRealTimeEvents);
connect(m_pAlarmEventRealTimeDock, &AlarmEventRealTimeDock::openConfigDialog, this, &DashboardFrame::onSignal_openAlarmEventCfgDialog);
m_pAlarmEventMainDialog = new AlarmEventMainDialog(this);
connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose()));
connect(m_pAlarmEventMainDialog, &AlarmEventMainDialog::openConfigDialog, this, &DashboardFrame::onSignal_openAlarmEventCfgDialog);
m_pAlarmEventMainDialog->hide();
m_pAlarmEventConfigDialog = new AlarmEventConfigDialog(this);
connect(m_pAlarmEventConfigDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose()));
m_pAlarmEventConfigDialog->hide();
}
else
{
@ -156,6 +168,13 @@ void DashboardFrame::resizeEvent(QResizeEvent* event)
m_pAlarmEventMainDialog->setGeometry(nX, nY, nWidth, nHeight);
}
if(m_pAlarmEventConfigDialog && m_pAlarmEventConfigDialog->isVisible())
{
int nX = this->geometry().x() + (this->width() - m_pAlarmEventConfigDialog->width()) * 0.5;
int nY = this->geometry().y() + (this->height() - m_pAlarmEventConfigDialog->height()) * 0.5;
m_pAlarmEventConfigDialog->move(nX, nY);
}
double ratioX = (double)event->size().width() / (double)event->oldSize().width();
double ratioY = (double)event->size().height() / (double)event->oldSize().height();
//qDebug() << ratioX << ", " << ratioY;
@ -604,12 +623,6 @@ void DashboardFrame::onBtnClicked_dashboardTab()
void DashboardFrame::onBtnClicked_showRealtimeEvents()
{
if(m_pAlarmEventMainDialog == nullptr)
{
m_pAlarmEventMainDialog = new AlarmEventMainDialog(this);
connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose()));
}
m_pAlarmEventMainDialog->setMode(Historical_Unconfirmed);
int nWidth = this->width() * 0.8;
int nHeight = this->height() * 0.8;
@ -623,12 +636,6 @@ void DashboardFrame::onBtnClicked_showRealtimeEvents()
void DashboardFrame::onBtnClicked_showHistoricalEvents()
{
if(m_pAlarmEventMainDialog == nullptr)
{
m_pAlarmEventMainDialog = new AlarmEventMainDialog(this);
connect(m_pAlarmEventMainDialog, SIGNAL(sgl_hide()), this, SLOT(onSignal_subDialogClose()));
}
m_pAlarmEventMainDialog->setMode(Historical_All);
int nWidth = this->width() * 0.8;
int nHeight = this->height() * 0.8;
@ -780,3 +787,13 @@ void DashboardFrame::onSignal_viewAllRealTimeEvents()
{
onBtnClicked_showRealtimeEvents();
}
void DashboardFrame::onSignal_openAlarmEventCfgDialog()
{
showTransparentMask();
int nX = this->geometry().x() + (this->width() - m_pAlarmEventConfigDialog->width()) * 0.5;
int nY = this->geometry().y() + (this->height() - m_pAlarmEventConfigDialog->height()) * 0.5;
m_pAlarmEventConfigDialog->move(nX, nY);
m_pAlarmEventConfigDialog->show();
m_pAlarmEventConfigDialog->raise();
}

View File

@ -246,7 +246,7 @@ QPushButton:pressed
</rect>
</property>
<property name="currentIndex">
<number>0</number>
<number>1</number>
</property>
<widget class="QWidget" name="page_dataFilter">
<property name="styleSheet">
@ -496,7 +496,7 @@ background-color:transparent;
<string>异常</string>
</property>
<property name="checked">
<bool>true</bool>
<bool>false</bool>
</property>
</widget>
<widget class="QCheckBox" name="pop_accident">

View File

@ -248,7 +248,7 @@ font: 700 18pt &quot;微软雅黑&quot;;
<widget class="QPushButton" name="btnConfirmAll">
<property name="geometry">
<rect>
<x>40</x>
<x>150</x>
<y>10</y>
<width>101</width>
<height>31</height>
@ -268,7 +268,7 @@ icon: url(:/images/icon_checked.png);
<widget class="QPushButton" name="btnSetting">
<property name="geometry">
<rect>
<x>170</x>
<x>1170</x>
<y>10</y>
<width>81</width>
<height>31</height>

View File

@ -343,7 +343,7 @@ QPushButton:pressed
</rect>
</property>
<property name="currentIndex">
<number>2</number>
<number>0</number>
</property>
<widget class="QWidget" name="pageDataType">
<property name="styleSheet">