noisemonitorparamdialog.cpp 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #include "noisemonitorparamdialog.h"
  2. #include "ui_noisemonitorparamwidget.h"
  3. #include <QFile>
  4. #include <QIntValidator>
  5. #include <QRegExpValidator>
  6. #include "UIStyleManager.h"
  7. #include "commonFunc.h"
  8. NoiseMonitorParamDialog::NoiseMonitorParamDialog(QWidget *parent) :
  9. DialogBase(parent),
  10. ui(new Ui::NoiseMonitorParamWidget)
  11. {
  12. QWidget* content = new QWidget(this);
  13. ui->setupUi(content);
  14. m_logger = spdlog::get("ACASetting");
  15. if(m_logger == nullptr)
  16. {
  17. fmt::print("NoiseMonitorParamDialog: Logger ACASetting not found\n");
  18. return;
  19. }
  20. /* 设置弹窗内容 */
  21. setContentWidget(content);
  22. /* 设置弹窗标题 */
  23. setTitle("噪音监测参数");
  24. /* 设置lineEdit输入限制 */
  25. ui->lineEdit_noiseOneDetectDuration->setValidator(new QIntValidator(1, 60, this));
  26. ui->lineEdit_noiseDetectContinueCount->setValidator(new QIntValidator(1, 100, this));
  27. ui->lineEdit_noiseContinueCountIsWarn->setValidator(new QIntValidator(1, 10, this));
  28. ui->lineEdit_noiseContinueCountPercent->setValidator(new QIntValidator(1, 100, this));
  29. ui->lineEdit_thresholdSlient->setValidator(new StrictDoubleValidator(-99.99, 0, 2, this));
  30. ui->lineEdit_thresholdDB->setValidator(new StrictDoubleValidator(-100, 0, 2, this));
  31. ui->lineEdit_thresholdCV->setValidator(new StrictDoubleValidator(-100, 0, 2, this));
  32. ui->lineEdit_nperseg->setValidator(new QIntValidator(1, 4096, this));
  33. ui->lineEdit_noverlap->setValidator(new QIntValidator(0, 4096, this));
  34. ui->lineEdit_nfft->setValidator(new QIntValidator(1, 4096, this));
  35. /* 隐藏计算参数 */
  36. ui->label_computeParam->hide();
  37. ui->label_10->hide();
  38. ui->lineEdit_nperseg->hide();
  39. ui->label_11->hide();
  40. ui->lineEdit_noverlap->hide();
  41. ui->label_13->hide();
  42. ui->lineEdit_nfft->hide();
  43. /* 连接信号和槽 */
  44. connect(ui->pBtn_restoreDefault, &QPushButton::clicked, this, &NoiseMonitorParamDialog::do_pBtn_restoreDefault_clicked);
  45. /* 设置噪音检测参数默认值 */
  46. m_defaultNoiseDetectParam.nNoiseContinueCountIsWarn = 5; /* 连续监测次数是否预警 */
  47. m_defaultNoiseDetectParam.nNoiseDetectContinueCount = 10; /* 持续监测次数 */
  48. m_defaultNoiseDetectParam.nNoiseOneDetectDuration = 1; /* 单次噪音检测时长 */
  49. m_defaultNoiseDetectParam.nNoiseContinueCountPercent = 80; /* 连续监测次数百分比 */
  50. m_defaultNoiseDetectParam.dThresholdSlient = -60.0; /* 静音阈值 */
  51. m_defaultNoiseDetectParam.dThresholdDB = -70.0; /* 噪音分贝阈值 */
  52. m_defaultNoiseDetectParam.dThresholdCV = -70.0; /* 变异系数阈值 */
  53. m_defaultNoiseDetectParam.nPerseg = 256; /* 分段长度 */
  54. m_defaultNoiseDetectParam.nOverlap = 32; /* 重叠长度 */
  55. m_defaultNoiseDetectParam.nFFT = 256; /* FFT点数 */
  56. /* 设置默认参数 */
  57. m_noiseDetectParam = m_defaultNoiseDetectParam;
  58. setInitialParams(m_noiseDetectParam);
  59. /* 设置qss */
  60. setQss();
  61. }
  62. NoiseMonitorParamDialog::~NoiseMonitorParamDialog()
  63. {
  64. delete ui;
  65. }
  66. /* 设置初始参数 */
  67. void NoiseMonitorParamDialog::setInitialParams(NoiseDetectParam_t& noiseDetectParam)
  68. {
  69. m_noiseDetectParam = noiseDetectParam;
  70. /* 设置初始参数到界面 */
  71. ui->lineEdit_noiseOneDetectDuration->setText(QString::number(noiseDetectParam.nNoiseOneDetectDuration));
  72. ui->lineEdit_noiseDetectContinueCount->setText(QString::number(noiseDetectParam.nNoiseDetectContinueCount));
  73. ui->lineEdit_noiseContinueCountIsWarn->setText(QString::number(noiseDetectParam.nNoiseContinueCountIsWarn));
  74. ui->lineEdit_noiseContinueCountPercent->setText(QString::number(noiseDetectParam.nNoiseContinueCountPercent));
  75. ui->lineEdit_thresholdSlient->setText(QString::number(noiseDetectParam.dThresholdSlient));
  76. ui->lineEdit_thresholdDB->setText(QString::number(noiseDetectParam.dThresholdDB));
  77. ui->lineEdit_thresholdCV->setText(QString::number(noiseDetectParam.dThresholdCV));
  78. ui->lineEdit_nperseg->setText(QString::number(noiseDetectParam.nPerseg));
  79. ui->lineEdit_noverlap->setText(QString::number(noiseDetectParam.nOverlap));
  80. ui->lineEdit_nfft->setText(QString::number(noiseDetectParam.nFFT));
  81. }
  82. /* 恢复默认值 */
  83. void NoiseMonitorParamDialog::do_pBtn_restoreDefault_clicked()
  84. {
  85. m_noiseDetectParam = m_defaultNoiseDetectParam;
  86. setInitialParams(m_noiseDetectParam);
  87. }
  88. /* 设置qss */
  89. void NoiseMonitorParamDialog::setQss()
  90. {
  91. QString qssPath = UIStyle.getQSSPath() + "/noisemonitorparamwidget.qss";
  92. QFile file(qssPath);
  93. if(file.open(QFile::ReadOnly))
  94. {
  95. QString qss = file.readAll();
  96. this->setStyleSheet(qss);
  97. file.close();
  98. }else {
  99. SPDLOG_LOGGER_WARN(m_logger, "无法打开QSS文件: {}", qssPath.toStdString());
  100. }
  101. }
  102. /* 点击了OK */
  103. bool NoiseMonitorParamDialog::isOKClicked()
  104. {
  105. updateNoiseDetectParam();
  106. return true;
  107. }
  108. /* 更新噪音检测参数 */
  109. void NoiseMonitorParamDialog::updateNoiseDetectParam()
  110. {
  111. m_noiseDetectParam.nNoiseOneDetectDuration = ui->lineEdit_noiseOneDetectDuration->text().toInt();
  112. m_noiseDetectParam.nNoiseDetectContinueCount = ui->lineEdit_noiseDetectContinueCount->text().toInt();
  113. m_noiseDetectParam.nNoiseContinueCountIsWarn = ui->lineEdit_noiseContinueCountIsWarn->text().toInt();
  114. m_noiseDetectParam.nNoiseContinueCountPercent = ui->lineEdit_noiseContinueCountPercent->text().toInt();
  115. m_noiseDetectParam.dThresholdSlient = ui->lineEdit_thresholdSlient->text().toDouble();
  116. m_noiseDetectParam.dThresholdDB = ui->lineEdit_thresholdDB->text().toDouble();
  117. m_noiseDetectParam.dThresholdCV = ui->lineEdit_thresholdCV->text().toDouble();
  118. m_noiseDetectParam.nPerseg = ui->lineEdit_nperseg->text().toInt();
  119. m_noiseDetectParam.nOverlap = ui->lineEdit_noverlap->text().toInt();
  120. m_noiseDetectParam.nFFT = ui->lineEdit_nfft->text().toInt();
  121. }