aicomparewidget.cpp 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. #include "aicomparewidget.h"
  2. #include "ui_aicomparewidget.h"
  3. #include <QStyle>
  4. #include "UIStyleManager.h"
  5. #include "SystemConfig.h"
  6. #include "FromWebAPI.h"
  7. #include "commonFunc.h"
  8. #include "tipwidget.h"
  9. AICompareWidget::AICompareWidget(QWidget *parent) :
  10. QWidget(parent),
  11. ui(new Ui::AICompareWidget)
  12. {
  13. ui->setupUi(this);
  14. m_logger = spdlog::get("ACASetting");
  15. if(m_logger == nullptr)
  16. {
  17. fmt::print("AICompareWidget: Logger ACAServer not found\n");
  18. return;
  19. }
  20. /* 设置 lineEdit_length 只能输入数字 */
  21. ui->lineEdit_length->setValidator(new QIntValidator(1, 120, this));
  22. /* 设置输入栏的弱提示符 */
  23. ui->lineEdit_length->setPlaceholderText("请输入, 限制1-120秒");
  24. /* ai对比持续次数 */
  25. ui->lineEdit_compareCount->setValidator(new QIntValidator(1, 10, this));
  26. ui->lineEdit_compareCount->setPlaceholderText("请输入, 限制1-10次");
  27. /* 不相似度阈值 */
  28. ui->lineEdit_notSimilarThrehold->setValidator(new StrictDoubleValidator(0.0, 1.0, 3, this));
  29. ui->lineEdit_notSimilarThrehold->setPlaceholderText("请输入, 阈值限制0.0-1.0");
  30. /* 相似度阈值 */
  31. ui->lineEdit_similarThrehold->setValidator(new StrictDoubleValidator(0.0, 1.0, 3, this));
  32. ui->lineEdit_similarThrehold->setPlaceholderText("请输入, 阈值限制0.0-1.0");
  33. /* 设置初始化的参数 */
  34. do_pBtn_restore_clicked();
  35. /* 连接信号和槽 */
  36. connect(ui->pBtn_restore, &QPushButton::clicked, this, &AICompareWidget::do_pBtn_restore_clicked);
  37. /* 设置样式 */
  38. UIStyle.registerWidget(this);
  39. }
  40. AICompareWidget::~AICompareWidget()
  41. {
  42. UIStyle.unregisterWidget(this);
  43. delete ui;
  44. }
  45. /* 判断参数是否修改 */
  46. bool AICompareWidget::isDataChanged()
  47. {
  48. bool isSuccess = true;
  49. /* 判断数据的有效性 */
  50. if(ui->lineEdit_length->text().isEmpty())
  51. {
  52. isSuccess = false;
  53. setWarn(ui->lineEdit_length, true);
  54. TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比持续时间不能为空", this);
  55. }
  56. if(ui->lineEdit_compareCount->text().isEmpty())
  57. {
  58. isSuccess = false;
  59. setWarn(ui->lineEdit_compareCount, true);
  60. TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比持续次数不能为空", this);
  61. }
  62. if(ui->lineEdit_notSimilarThrehold->text().isEmpty())
  63. {
  64. isSuccess = false;
  65. setWarn(ui->lineEdit_notSimilarThrehold, true);
  66. TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比不相似度阈值不能为空", this);
  67. }
  68. if(ui->lineEdit_similarThrehold->text().isEmpty())
  69. {
  70. isSuccess = false;
  71. setWarn(ui->lineEdit_similarThrehold, true);
  72. TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比相似度阈值不能为空", this);
  73. }
  74. if(isSuccess == false)
  75. {
  76. return false;
  77. }
  78. m_aiCompareConfig.nAiComputeDuration = ui->lineEdit_length->text().toInt();
  79. m_aiCompareConfig.nAiCompareCount = ui->lineEdit_compareCount->text().toInt();
  80. m_aiCompareConfig.fSimilarThrehold = ui->lineEdit_similarThrehold->text().toFloat();
  81. m_aiCompareConfig.fNotSimilarThrehold = ui->lineEdit_notSimilarThrehold->text().toFloat();
  82. m_aiCompareConfig.bNoConsistencyAlarmOtherAlarm = ui->checkBox_noConsistencyOtherAlarm->isChecked();
  83. /* 和历史数据进行对比 */
  84. const AICompareConfig_t &oldConfig = SysConfig.getAICompareConfig();
  85. if(m_aiCompareConfig == oldConfig)
  86. {
  87. SPDLOG_LOGGER_DEBUG(m_logger, "AI对比配置没有变化,不需要更新");
  88. return false;
  89. }
  90. return true;
  91. }
  92. /* 保存配置项 */
  93. bool AICompareWidget::saveConfig()
  94. {
  95. cancelAllWarn();
  96. if(!isDataChanged())
  97. {
  98. return true; // 没有修改,直接返回成功
  99. }
  100. /* 将AI对比配置转换成json */
  101. std::string strJson;
  102. if(!SysConfig.setAICompareConfigToJson(m_aiCompareConfig, strJson))
  103. {
  104. SPDLOG_LOGGER_ERROR(m_logger, "设置AI对比配置转换成JSON失败");
  105. return false;
  106. }
  107. /* 更新数据库信息 */
  108. if(!m_fromWebAPI->updateSystemConfig(Config_CompareAI, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_CompareAI]))
  109. {
  110. SPDLOG_LOGGER_ERROR(m_logger, "更新AI对比配置失败");
  111. return false;
  112. }
  113. /* 更新系统设置 */
  114. SysConfig.setAICompareConfig(m_aiCompareConfig);
  115. SPDLOG_LOGGER_DEBUG(m_logger, "AI对比配置更新成功");
  116. return true;
  117. }
  118. /* 恢复配置项 */
  119. void AICompareWidget::do_pBtn_restore_clicked()
  120. {
  121. const AICompareConfig_t &aiConfig = SysConfig.getAICompareConfig();
  122. ui->lineEdit_length->setText(QString::number(aiConfig.nAiComputeDuration));
  123. ui->lineEdit_compareCount->setText(QString::number(aiConfig.nAiCompareCount));
  124. ui->lineEdit_similarThrehold->setText(QString::number(aiConfig.fSimilarThrehold, 'f', 3));
  125. ui->lineEdit_notSimilarThrehold->setText(QString::number(aiConfig.fNotSimilarThrehold, 'f', 3));
  126. ui->checkBox_noConsistencyOtherAlarm->setChecked(aiConfig.bNoConsistencyAlarmOtherAlarm);
  127. }
  128. /* 设置一个控件报警,边框显示红色
  129. * 注意:这个功能需要在qss里设置属性[Warn=true],并实现相应的报警样式 */
  130. void AICompareWidget::setWarn(QWidget* widget, bool isWarn)
  131. {
  132. if(widget == nullptr)
  133. {
  134. SPDLOG_LOGGER_ERROR(m_logger, "设置控件报警失败,widget为nullptr");
  135. return;
  136. }
  137. widget->setProperty("Warn", isWarn);
  138. widget->style()->unpolish(widget);
  139. widget->style()->polish(widget);
  140. widget->update();
  141. }
  142. /* 取消全部报警 */
  143. void AICompareWidget::cancelAllWarn()
  144. {
  145. setWarn(ui->lineEdit_compareCount, false);
  146. setWarn(ui->lineEdit_length, false);
  147. setWarn(ui->lineEdit_notSimilarThrehold, false);
  148. setWarn(ui->lineEdit_similarThrehold, false);
  149. }