noisewidget.cpp 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. #include "noisewidget.h"
  2. #include "ui_noisewidget.h"
  3. #include "noisemonitorparamdialog.h"
  4. #include <QStyle>
  5. #include "UIStyleManager.h"
  6. #include "SystemConfig.h"
  7. #include "FromWebAPI.h"
  8. #include "commonFunc.h"
  9. #include "tipwidget.h"
  10. NoiseWidget::NoiseWidget(QWidget *parent) :
  11. QWidget(parent),
  12. ui(new Ui::NoiseWidget)
  13. {
  14. ui->setupUi(this);
  15. m_logger = spdlog::get("ACASetting");
  16. if(m_logger == nullptr)
  17. {
  18. fmt::print("NoiseWidget: Logger ACASetting not found\n");
  19. return;
  20. }
  21. /* 隐藏不需要的输入栏 */
  22. /* 噪音服务地址 */
  23. ui->lineEdit_serverAddr->hide();
  24. ui->label_5->hide();
  25. /* 噪音文件目录 */
  26. ui->lineEdit_noiseFileDir->hide();
  27. ui->label_2->hide();
  28. /* 服务程序路径 */
  29. ui->lineEdit_serverPath->hide();
  30. ui->label_3->hide();
  31. /* 设置输入数字的栏只能输入数字,并限制为整数0-60 */
  32. ui->lineEdit_detectInternal->setValidator(new StrictIntValidator(0, 60, this));
  33. /* 设置输入栏的弱提示符 */
  34. ui->lineEdit_detectInternal->setPlaceholderText("请输入, 限制0-60秒");
  35. /* 设置初始参数 */
  36. do_pBtn_restore_clicked();
  37. /* 获取噪音检测参数 */
  38. m_noiseDetectParam = SysConfig.getNoiseDetectParam();
  39. /* 连接信号和槽 */
  40. connect(ui->pBtn_editNoiseParam, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_editNoiseParam_clicked);
  41. connect(ui->pBtn_restore, &QPushButton::clicked, this, &NoiseWidget::do_pBtn_restore_clicked);
  42. UIStyle.registerWidget(this);
  43. }
  44. NoiseWidget::~NoiseWidget()
  45. {
  46. UIStyle.unregisterWidget(this);
  47. delete ui;
  48. }
  49. void NoiseWidget::do_pBtn_editNoiseParam_clicked()
  50. {
  51. NoiseMonitorParamDialog dlg;
  52. /* 设置当前参数 */
  53. dlg.setInitialParams(m_noiseDetectParam);
  54. /* 执行对话框 */
  55. dlg.exec();
  56. /* 判断是否点击了OK */
  57. if(!dlg.isOK())
  58. {
  59. return;
  60. }
  61. /* 获取当前参数 */
  62. m_noiseDetectParam = dlg.getCurrentParams();
  63. }
  64. /* 恢复配置项 */
  65. void NoiseWidget::do_pBtn_restore_clicked()
  66. {
  67. const NoiseDetectBaseConfig_t &noiseConfig = SysConfig.getNoiseDetectBaseConfig();
  68. ui->lineEdit_serverAddr->setText(noiseConfig.strNoiseServerAddr);
  69. ui->lineEdit_noiseFileDir->setText(noiseConfig.strNoiseDetectDir);
  70. ui->lineEdit_serverPath->setText(noiseConfig.strServerPath);
  71. ui->lineEdit_serverPath->setText(noiseConfig.strServerPath);
  72. ui->lineEdit_detectInternal->setText(QString::number(noiseConfig.nNoiseDetectInterval));
  73. ui->checkBox_enableNoiseDetect->setChecked(noiseConfig.isEnableNoiseDetect);
  74. ui->checkBox_mainRoadEnable->setChecked(noiseConfig.isEnableMainRoadDetect);
  75. }
  76. /* 保存参数 */
  77. bool NoiseWidget::saveConfig()
  78. {
  79. cancelAllWarn();
  80. bool isSuccess = true;
  81. /* 先保存基础设置 */
  82. if(!saveBaseConfig())
  83. {
  84. isSuccess = false;
  85. return false;
  86. }
  87. /* 再保存噪音检测参数 */
  88. if(!saveNoiseDetectParam())
  89. {
  90. isSuccess = false;
  91. return false;
  92. }
  93. return isSuccess;
  94. }
  95. /* 判断数据是否修改了 */
  96. bool NoiseWidget::isDataChanged()
  97. {
  98. if( isDataChangedBaseConfig() || isDataChangedNoiseDetectParam() )
  99. {
  100. return true;
  101. }else {
  102. return false;
  103. }
  104. }
  105. /* 判断基础数据是否修改了 */
  106. bool NoiseWidget::isDataChangedBaseConfig()
  107. {
  108. /* 先检查有效性 */
  109. if(ui->lineEdit_detectInternal->text().isEmpty())
  110. {
  111. setWarn(ui->lineEdit_detectInternal, true);
  112. TipWidget::display(TipWidget::OPERATOR_WARN, QString("检测间隔不能为空"), this);
  113. return false;
  114. }
  115. m_noiseDetectBaseConfig.strNoiseServerAddr = ui->lineEdit_serverAddr->text();
  116. m_noiseDetectBaseConfig.strNoiseDetectDir = ui->lineEdit_noiseFileDir->text();
  117. m_noiseDetectBaseConfig.strServerPath = ui->lineEdit_serverPath->text();
  118. m_noiseDetectBaseConfig.nNoiseDetectInterval = ui->lineEdit_detectInternal->text().toInt();
  119. m_noiseDetectBaseConfig.isEnableNoiseDetect = ui->checkBox_enableNoiseDetect->isChecked();
  120. m_noiseDetectBaseConfig.isEnableMainRoadDetect = ui->checkBox_mainRoadEnable->isChecked();
  121. /* 和历史数据进行对比 */
  122. const NoiseDetectBaseConfig_t &oldConfig = SysConfig.getNoiseDetectBaseConfig();
  123. if(m_noiseDetectBaseConfig == oldConfig)
  124. {
  125. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置没有变化,不需要更新");
  126. return false;
  127. }
  128. return true;
  129. }
  130. /* 判断噪音检测参数是否修改了 */
  131. bool NoiseWidget::isDataChangedNoiseDetectParam()
  132. {
  133. const NoiseDetectParam_t &oldParam = SysConfig.getNoiseDetectParam();
  134. if(m_noiseDetectParam == oldParam)
  135. {
  136. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数没有变化,不需要更新");
  137. return false;
  138. }
  139. return true;
  140. }
  141. /* 保存基础参数 */
  142. bool NoiseWidget::saveBaseConfig()
  143. {
  144. if(!isDataChangedBaseConfig())
  145. {
  146. return true;
  147. }
  148. /* 将噪音检测基础配置转换成json */
  149. std::string strJson;
  150. if(!SysConfig.setNoiseDetectBaseConfigToJson(m_noiseDetectBaseConfig, strJson))
  151. {
  152. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测基础配置转换成JSON失败");
  153. return false;
  154. }
  155. /* 更新数据库信息 */
  156. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseBase, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseBase]))
  157. {
  158. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测基础配置失败");
  159. return false;
  160. }
  161. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测基础配置更新成功");
  162. return true;
  163. }
  164. /* 保存噪音检测参数 */
  165. bool NoiseWidget::saveNoiseDetectParam()
  166. {
  167. /* 和历史数据进行对比 */
  168. if(isDataChangedNoiseDetectParam() == false)
  169. {
  170. return true;
  171. }
  172. /* 将噪音检测参数转换成json */
  173. std::string strJson;
  174. if(!SysConfig.setNoiseDetectParamToJson(m_noiseDetectParam, strJson))
  175. {
  176. SPDLOG_LOGGER_ERROR(m_logger, "设置噪音检测参数转换成JSON失败");
  177. return false;
  178. }
  179. /* 更新数据库信息 */
  180. if(!m_fromWebAPI->updateSystemConfig(Config_NoiseParam, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_NoiseParam]))
  181. {
  182. SPDLOG_LOGGER_ERROR(m_logger, "更新噪音检测参数失败");
  183. return false;
  184. }
  185. /* 更新系统配置 */
  186. SysConfig.setNoiseDetectParam(m_noiseDetectParam);
  187. SPDLOG_LOGGER_DEBUG(m_logger, "噪音检测参数更新成功");
  188. return true;
  189. }
  190. /* 设置一个控件报警,边框显示红色
  191. * 注意:这个功能需要在qss里设置属性[Warn=true],并实现相应的报警样式 */
  192. void NoiseWidget::setWarn(QWidget* widget, bool isWarn)
  193. {
  194. if(widget == nullptr)
  195. {
  196. SPDLOG_LOGGER_ERROR(m_logger, "设置控件报警失败,widget为nullptr");
  197. return;
  198. }
  199. widget->setProperty("Warn", isWarn);
  200. widget->style()->unpolish(widget);
  201. widget->style()->polish(widget);
  202. widget->update();
  203. }
  204. /* 取消全部报警 */
  205. void NoiseWidget::cancelAllWarn()
  206. {
  207. setWarn(ui->lineEdit_detectInternal, false);
  208. }