123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- #include "noisemonitorparamdialog.h"
- #include "ui_noisemonitorparamwidget.h"
- #include <QFile>
- #include <QIntValidator>
- #include <QRegExpValidator>
- #include "UIStyleManager.h"
- #include "commonFunc.h"
- #include "tipwidget.h"
- NoiseMonitorParamDialog::NoiseMonitorParamDialog(QWidget *parent) :
- DialogBase(parent),
- ui(new Ui::NoiseMonitorParamWidget)
- {
- QWidget* content = new QWidget(this);
- ui->setupUi(content);
- m_logger = spdlog::get("ACASetting");
- if(m_logger == nullptr)
- {
- fmt::print("NoiseMonitorParamDialog: Logger ACASetting not found\n");
- return;
- }
- /* 设置弹窗内容 */
- setContentWidget(content);
- /* 设置弹窗标题 */
- setTitle("噪音监测参数");
- /* 设置lineEdit输入限制 */
- setLimitParamRange();
- /* 隐藏计算参数 */
- ui->label_computeParam->hide();
- ui->label_10->hide();
- ui->lineEdit_nperseg->hide();
- ui->label_11->hide();
- ui->lineEdit_noverlap->hide();
- ui->label_13->hide();
- ui->lineEdit_nfft->hide();
- /* 连接信号和槽 */
- connect(ui->pBtn_restoreDefault, &QPushButton::clicked, this, &NoiseMonitorParamDialog::do_pBtn_restoreDefault_clicked);
- /* 设置噪音检测参数默认值 */
- m_defaultNoiseDetectParam.nNoiseContinueCountIsWarn = 5; /* 连续监测次数是否预警 */
- m_defaultNoiseDetectParam.nNoiseDetectContinueCount = 10; /* 持续监测次数 */
- m_defaultNoiseDetectParam.nNoiseOneDetectDuration = 1; /* 单次噪音检测时长 */
- m_defaultNoiseDetectParam.nNoiseContinueCountPercent = 80; /* 连续监测次数百分比 */
- m_defaultNoiseDetectParam.dThresholdSlient = -60.0; /* 静音阈值 */
- m_defaultNoiseDetectParam.dThresholdDB = -70.0; /* 噪音分贝阈值 */
- m_defaultNoiseDetectParam.dThresholdCV = -70.0; /* 变异系数阈值 */
- m_defaultNoiseDetectParam.nPerseg = 256; /* 分段长度 */
- m_defaultNoiseDetectParam.nOverlap = 32; /* 重叠长度 */
- m_defaultNoiseDetectParam.nFFT = 256; /* FFT点数 */
- /* 设置默认参数 */
- m_noiseDetectParam = m_defaultNoiseDetectParam;
- setInitialParams(m_noiseDetectParam);
- /* 设置qss */
- setQss();
- }
- NoiseMonitorParamDialog::~NoiseMonitorParamDialog()
- {
- delete ui;
- }
- /* 设置初始参数 */
- void NoiseMonitorParamDialog::setInitialParams(NoiseDetectParam_t& noiseDetectParam)
- {
- m_noiseDetectParam = noiseDetectParam;
- /* 设置初始参数到界面 */
- ui->lineEdit_noiseOneDetectDuration->setText(QString::number(noiseDetectParam.nNoiseOneDetectDuration));
- ui->lineEdit_noiseDetectContinueCount->setText(QString::number(noiseDetectParam.nNoiseDetectContinueCount));
- ui->lineEdit_noiseContinueCountIsWarn->setText(QString::number(noiseDetectParam.nNoiseContinueCountIsWarn));
- ui->lineEdit_noiseContinueCountPercent->setText(QString::number(noiseDetectParam.nNoiseContinueCountPercent));
- ui->lineEdit_thresholdSlient->setText(QString::number(noiseDetectParam.dThresholdSlient));
- ui->lineEdit_thresholdDB->setText(QString::number(noiseDetectParam.dThresholdDB));
- ui->lineEdit_thresholdCV->setText(QString::number(noiseDetectParam.dThresholdCV));
-
- ui->lineEdit_nperseg->setText(QString::number(noiseDetectParam.nPerseg));
- ui->lineEdit_noverlap->setText(QString::number(noiseDetectParam.nOverlap));
- ui->lineEdit_nfft->setText(QString::number(noiseDetectParam.nFFT));
- }
- /* 恢复默认值 */
- void NoiseMonitorParamDialog::do_pBtn_restoreDefault_clicked()
- {
- m_noiseDetectParam = m_defaultNoiseDetectParam;
- setInitialParams(m_noiseDetectParam);
- }
- /* 设置qss */
- void NoiseMonitorParamDialog::setQss()
- {
- QString qssPath = UIStyle.getQSSPath() + "/noisemonitorparamwidget.qss";
- QFile file(qssPath);
- if(file.open(QFile::ReadOnly))
- {
- QString qss = file.readAll();
- this->setStyleSheet(qss);
- file.close();
- }else {
- SPDLOG_LOGGER_WARN(m_logger, "无法打开QSS文件: {}", qssPath.toStdString());
- }
- }
- /* 点击了OK */
- bool NoiseMonitorParamDialog::isOKClicked()
- {
- cancelAllWarn();
- if(!updateNoiseDetectParam())
- {
- return false;
- }
- return true;
- }
- /* 更新噪音检测参数 */
- bool NoiseMonitorParamDialog::updateNoiseDetectParam()
- {
- /* 获取所有的值 */
- int noiseOneDetectDuration = ui->lineEdit_noiseOneDetectDuration->text().toInt();
- int noiseDetectContinueCount = ui->lineEdit_noiseDetectContinueCount->text().toInt();
- int noiseContinueCountIsWarn = ui->lineEdit_noiseContinueCountIsWarn->text().toInt();
- int noiseContinueCountPercent = ui->lineEdit_noiseContinueCountPercent->text().toInt();
- double thresholdSlient = ui->lineEdit_thresholdSlient->text().toDouble();
- double thresholdDB = ui->lineEdit_thresholdDB->text().toDouble();
- double thresholdCV = ui->lineEdit_thresholdCV->text().toDouble();
- int nPerseg = ui->lineEdit_nperseg->text().toInt();
- int nOverlap = ui->lineEdit_noverlap->text().toInt();
- int nFFT = ui->lineEdit_nfft->text().toInt();
- /* 检查是否有超过范围的参数 */
- bool isOverRange = false;
- if(noiseOneDetectDuration < m_noiseOneDetectDurationLow || noiseOneDetectDuration > m_noiseOneDetectDurationHigh)
- {
- setWarn(ui->lineEdit_noiseOneDetectDuration, true);
- isOverRange = true;
- }
- if(noiseDetectContinueCount < m_noiseDetectContinueCountLow || noiseDetectContinueCount > m_noiseDetectContinueCountHigh)
- {
- setWarn(ui->lineEdit_noiseDetectContinueCount, true);
- isOverRange = true;
- }
- if(noiseContinueCountIsWarn < m_noiseContinueCountIsWarnLow || noiseContinueCountIsWarn > m_noiseContinueCountIsWarnHigh)
- {
- setWarn(ui->lineEdit_noiseContinueCountIsWarn, true);
- isOverRange = true;
- }
- if(noiseContinueCountPercent < m_noiseContinueCountPercentLow || noiseContinueCountPercent > m_noiseContinueCountPercentHigh)
- {
- setWarn(ui->lineEdit_noiseContinueCountPercent, true);
- isOverRange = true;
- }
- if(thresholdSlient < m_thresholdSlientLow || thresholdSlient > m_thresholdSlientHigh)
- {
- setWarn(ui->lineEdit_thresholdSlient, true);
- isOverRange = true;
- }
- if(thresholdDB < m_thresholdDBLow || thresholdDB > m_thresholdDBHigh)
- {
- setWarn(ui->lineEdit_thresholdDB, true);
- isOverRange = true;
- }
- if(thresholdCV < m_thresholdCVLow || thresholdCV > m_thresholdCVHigh)
- {
- setWarn(ui->lineEdit_thresholdCV, true);
- isOverRange = true;
- }
- if(nPerseg < m_npersegLow || nPerseg > m_npersegHigh)
- {
- setWarn(ui->lineEdit_nperseg, true);
- isOverRange = true;
- }
- if(nOverlap < m_noverlapLow || nOverlap > m_noverlapHigh)
- {
- setWarn(ui->lineEdit_noverlap, true);
- isOverRange = true;
- }
- if(nFFT < m_nfftLow || nFFT > m_nfftHigh)
- {
- setWarn(ui->lineEdit_nfft, true);
- isOverRange = true;
- }
- if(isOverRange)
- {
- TipWidget::display(TipWidget::OPERATOR_WARN, "参数输入超出范围,请检查", this);
- return false;
- }
- m_noiseDetectParam.nNoiseOneDetectDuration = noiseOneDetectDuration;
- m_noiseDetectParam.nNoiseDetectContinueCount = noiseDetectContinueCount;
- m_noiseDetectParam.nNoiseContinueCountIsWarn = noiseContinueCountIsWarn;
- m_noiseDetectParam.nNoiseContinueCountPercent = noiseContinueCountPercent;
- m_noiseDetectParam.dThresholdSlient = thresholdSlient;
- m_noiseDetectParam.dThresholdDB = thresholdDB;
- m_noiseDetectParam.dThresholdCV = thresholdCV;
- m_noiseDetectParam.nPerseg = nPerseg;
- m_noiseDetectParam.nOverlap = nOverlap;
- m_noiseDetectParam.nFFT = nFFT;
- return true;
- }
- /* 设置限制参数范围 */
- void NoiseMonitorParamDialog::setLimitParamRange()
- {
- ui->lineEdit_noiseOneDetectDuration->setValidator(new QIntValidator(m_noiseOneDetectDurationLow, m_noiseOneDetectDurationHigh, this));
- ui->lineEdit_noiseDetectContinueCount->setValidator(new QIntValidator(m_noiseDetectContinueCountLow, m_noiseDetectContinueCountHigh, this));
- ui->lineEdit_noiseContinueCountIsWarn->setValidator(new QIntValidator(m_noiseContinueCountIsWarnLow, m_noiseContinueCountIsWarnHigh, this));
- ui->lineEdit_noiseContinueCountPercent->setValidator(new QIntValidator(m_noiseContinueCountPercentLow, m_noiseContinueCountPercentHigh, this));
- ui->lineEdit_thresholdSlient->setValidator(new StrictDoubleValidator(m_thresholdSlientLow, m_thresholdSlientHigh, 2, this));
- ui->lineEdit_thresholdDB->setValidator(new StrictDoubleValidator(m_thresholdDBLow, m_thresholdDBHigh, 2, this));
- ui->lineEdit_thresholdCV->setValidator(new StrictDoubleValidator(m_thresholdCVLow, m_thresholdCVHigh, 2, this));
- ui->lineEdit_nperseg->setValidator(new QIntValidator(m_npersegLow, m_npersegHigh, this));
- ui->lineEdit_noverlap->setValidator(new QIntValidator(m_noverlapLow, m_noverlapHigh, this));
- ui->lineEdit_nfft->setValidator(new QIntValidator(m_nfftLow, m_nfftHigh, this));
- }
- /* 取消所有的报警红框 */
- void NoiseMonitorParamDialog::cancelAllWarn()
- {
- setWarn(ui->lineEdit_noiseOneDetectDuration, false);
- setWarn(ui->lineEdit_noiseDetectContinueCount, false);
- setWarn(ui->lineEdit_noiseContinueCountIsWarn, false);
- setWarn(ui->lineEdit_noiseContinueCountPercent, false);
- setWarn(ui->lineEdit_thresholdSlient, false);
- setWarn(ui->lineEdit_thresholdDB, false);
- setWarn(ui->lineEdit_thresholdCV, false);
- setWarn(ui->lineEdit_nperseg, false);
- setWarn(ui->lineEdit_noverlap, false);
- setWarn(ui->lineEdit_nfft, false);
- }
|