#include "noisewidget.h" #include "ui_noisewidget.h" #include "noisemonitorparamdialog.h" #include #include "UIStyleManager.h" #include "SystemConfig.h" #include "FromWebAPI.h" #include "commonFunc.h" #include "tipwidget.h" NoiseWidget::NoiseWidget(QWidget *parent) : QWidget(parent), ui(new Ui::NoiseWidget) { ui->setupUi(this); m_logger = spdlog::get("ACASetting"); if(m_logger == nullptr) { fmt::print("NoiseWidget: Logger ACASetting not found\n"); return; } /* 隐藏不需要的输入栏 */ /* 噪音服务地址 */ ui->lineEdit_serverAddr->hide(); ui->label_5->hide(); /* 噪音文件目录 */ ui->lineEdit_noiseFileDir->hide(); ui->label_2->hide(); /* 服务程序路径 */ ui->lineEdit_serverPath->hide(); ui->label_3->hide(); /* 设置输入数字的栏只能输入数字,并限制为整数0-60 */ ui->lineEdit_detectInternal->setValidator(new StrictIntValidator(0, 60, this)); /* 设置输入栏的弱提示符 */ ui->lineEdit_detectInternal->setPlaceholderText("请输入, 限制0-60秒"); /* 设置初始参数 */ do_pBtn_restore_clicked(); /* 获取噪音检测参数 */ m_noiseDetectParam = SysConfig.getNoiseDetectParam(); /* 连接信号和槽 */ connect(ui->pBtn_editNoiseParam, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_editNoiseParam_clicked); connect(ui->pBtn_restore, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_restore_clicked); UIStyle.registerWidget(this); } NoiseWidget::~NoiseWidget() { UIStyle.unregisterWidget(this); delete ui; } void NoiseWidget::do_pBtn_editNoiseParam_clicked() { NoiseMonitorParamDialog dlg; /* 设置当前参数 */ dlg.setInitialParams(m_noiseDetectParam); /* 执行对话框 */ dlg.exec(); /* 判断是否点击了OK */ if(!dlg.isOK()) { return; } /* 获取当前参数 */ m_noiseDetectParam = dlg.getCurrentParams(); } /* 恢复配置项 */ void NoiseWidget::do_pBtn_restore_clicked() { const NoiseDetectBaseConfig_t &noiseConfig = SysConfig.getNoiseDetectBaseConfig(); ui->lineEdit_serverAddr->setText(noiseConfig.strNoiseServerAddr); ui->lineEdit_noiseFileDir->setText(noiseConfig.strNoiseDetectDir); ui->lineEdit_serverPath->setText(noiseConfig.strServerPath); ui->lineEdit_serverPath->setText(noiseConfig.strServerPath); ui->lineEdit_detectInternal->setText(QString::number(noiseConfig.nNoiseDetectInterval)); ui->checkBox_enableNoiseDetect->setChecked(noiseConfig.isEnableNoiseDetect); ui->checkBox_mainRoadEnable->setChecked(noiseConfig.isEnableMainRoadDetect); } /* 保存参数 */ bool NoiseWidget::saveConfig() { cancelAllWarn(); bool isSuccess = true; /* 先保存基础设置 */ if(!saveBaseConfig()) { isSuccess = false; return false; } /* 再保存噪音检测参数 */ if(!saveNoiseDetectParam()) { isSuccess = false; return false; } return isSuccess; } /* 判断数据是否修改了 */ bool NoiseWidget::isDataChanged() { if( isDataChangedBaseConfig() || isDataChangedNoiseDetectParam() ) { return true; }else { return false; } } /* 判断基础数据是否修改了 */ bool NoiseWidget::isDataChangedBaseConfig() { /* 先检查有效性 */ if(ui->lineEdit_detectInternal->text().isEmpty()) { setWarn(ui->lineEdit_detectInternal, true); TipWidget::display(TipWidget::OPERATOR_WARN, QString("检测间隔不能为空"), this); return false; } m_noiseDetectBaseConfig.strNoiseServerAddr = ui->lineEdit_serverAddr->text(); m_noiseDetectBaseConfig.strNoiseDetectDir = ui->lineEdit_noiseFileDir->text(); m_noiseDetectBaseConfig.strServerPath = ui->lineEdit_serverPath->text(); m_noiseDetectBaseConfig.nNoiseDetectInterval = ui->lineEdit_detectInternal->text().toInt(); m_noiseDetectBaseConfig.isEnableNoiseDetect = ui->checkBox_enableNoiseDetect->isChecked(); m_noiseDetectBaseConfig.isEnableMainRoadDetect = ui->checkBox_mainRoadEnable->isChecked(); /* 和历史数据进行对比 */ const NoiseDetectBaseConfig_t &oldConfig = SysConfig.getNoiseDetectBaseConfig(); if(m_noiseDetectBaseConfig == oldConfig) { SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置没有变化,不需要更新"); return false; } return true; } /* 判断噪音检测参数是否修改了 */ bool NoiseWidget::isDataChangedNoiseDetectParam() { const NoiseDetectParam_t &oldParam = SysConfig.getNoiseDetectParam(); if(m_noiseDetectParam == oldParam) { SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数没有变化,不需要更新"); return false; } return true; } /* 保存基础参数 */ bool NoiseWidget::saveBaseConfig() { if(!isDataChangedBaseConfig()) { return true; } /* 将噪音检测基础配置转换成json */ std::string strJson; if(!SysConfig.setNoiseDetectBaseConfigToJson(m_noiseDetectBaseConfig, strJson)) { SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测基础配置转换成JSON失败"); return false; } /* 更新数据库信息 */ if(!m_fromWebAPI->updateSystemConfig(Config_NoiseBase, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseBase])) { SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测基础配置失败"); return false; } SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置更新成功"); return true; } /* 保存噪音检测参数 */ bool NoiseWidget::saveNoiseDetectParam() { /* 和历史数据进行对比 */ if(isDataChangedNoiseDetectParam() == false) { return true; } /* 将噪音检测参数转换成json */ std::string strJson; if(!SysConfig.setNoiseDetectParamToJson(m_noiseDetectParam, strJson)) { SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测参数转换成JSON失败"); return false; } /* 更新数据库信息 */ if(!m_fromWebAPI->updateSystemConfig(Config_NoiseParam, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseParam])) { SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测参数失败"); return false; } /* 更新系统配置 */ SysConfig.setNoiseDetectParam(m_noiseDetectParam); SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数更新成功"); return true; } /* 设置一个控件报警,边框显示红色 * 注意:这个功能需要在qss里设置属性[Warn=true],并实现相应的报警样式 */ void NoiseWidget::setWarn(QWidget* widget, bool isWarn) { if(widget == nullptr) { SPDLOG_LOGGER_ERROR(m_logger, "设置控件报警失败,widget为nullptr"); return; } widget->setProperty("Warn", isWarn); widget->style()->unpolish(widget); widget->style()->polish(widget); widget->update(); } /* 取消全部报警 */ void NoiseWidget::cancelAllWarn() { setWarn(ui->lineEdit_detectInternal, false); }