#include "noisemonitorparamdialog.h" #include "ui_noisemonitorparamwidget.h" #include #include #include #include "UIStyleManager.h" #include "commonFunc.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输入限制 */ ui->lineEdit_noiseOneDetectDuration->setValidator(new QIntValidator(1, 60, this)); ui->lineEdit_noiseDetectContinueCount->setValidator(new QIntValidator(1, 100, this)); ui->lineEdit_noiseContinueCountIsWarn->setValidator(new QIntValidator(1, 10, this)); ui->lineEdit_noiseContinueCountPercent->setValidator(new QIntValidator(1, 100, this)); ui->lineEdit_thresholdSlient->setValidator(new StrictDoubleValidator(-99.99, 0, 2, this)); ui->lineEdit_thresholdDB->setValidator(new StrictDoubleValidator(-100, 0, 2, this)); ui->lineEdit_thresholdCV->setValidator(new StrictDoubleValidator(-100, 0, 2, this)); ui->lineEdit_nperseg->setValidator(new QIntValidator(1, 4096, this)); ui->lineEdit_noverlap->setValidator(new QIntValidator(0, 4096, this)); ui->lineEdit_nfft->setValidator(new QIntValidator(1, 4096, this)); /* 隐藏计算参数 */ 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() { updateNoiseDetectParam(); return true; } /* 更新噪音检测参数 */ void NoiseMonitorParamDialog::updateNoiseDetectParam() { m_noiseDetectParam.nNoiseOneDetectDuration = ui->lineEdit_noiseOneDetectDuration->text().toInt(); m_noiseDetectParam.nNoiseDetectContinueCount = ui->lineEdit_noiseDetectContinueCount->text().toInt(); m_noiseDetectParam.nNoiseContinueCountIsWarn = ui->lineEdit_noiseContinueCountIsWarn->text().toInt(); m_noiseDetectParam.nNoiseContinueCountPercent = ui->lineEdit_noiseContinueCountPercent->text().toInt(); m_noiseDetectParam.dThresholdSlient = ui->lineEdit_thresholdSlient->text().toDouble(); m_noiseDetectParam.dThresholdDB = ui->lineEdit_thresholdDB->text().toDouble(); m_noiseDetectParam.dThresholdCV = ui->lineEdit_thresholdCV->text().toDouble(); m_noiseDetectParam.nPerseg = ui->lineEdit_nperseg->text().toInt(); m_noiseDetectParam.nOverlap = ui->lineEdit_noverlap->text().toInt(); m_noiseDetectParam.nFFT = ui->lineEdit_nfft->text().toInt(); }