123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 |
- #include "aicomparewidget.h"
- #include "ui_aicomparewidget.h"
- #include <QStyle>
- #include "UIStyleManager.h"
- #include "SystemConfig.h"
- #include "FromWebAPI.h"
- #include "commonFunc.h"
- #include "tipwidget.h"
- AICompareWidget::AICompareWidget(QWidget *parent) :
- QWidget(parent),
- ui(new Ui::AICompareWidget)
- {
- ui->setupUi(this);
- m_logger = spdlog::get("ACASetting");
- if(m_logger == nullptr)
- {
- fmt::print("AICompareWidget: Logger ACAServer not found\n");
- return;
- }
- /* 设置 lineEdit_length 只能输入数字 */
- ui->lineEdit_length->setValidator(new QIntValidator(1, 120, this));
- /* 设置输入栏的弱提示符 */
- ui->lineEdit_length->setPlaceholderText("请输入, 限制1-120秒");
- /* ai对比持续次数 */
- ui->lineEdit_compareCount->setValidator(new QIntValidator(1, 10, this));
- ui->lineEdit_compareCount->setPlaceholderText("请输入, 持续对比次数限制1-10次");
- /* 不相似度阈值 */
- ui->lineEdit_notSimilarThrehold->setValidator(new StrictDoubleValidator(0.0, 1.0, 3, this));
- ui->lineEdit_notSimilarThrehold->setPlaceholderText("请输入, 阈值限制0.0-1.0");
- /* 相似度阈值 */
- ui->lineEdit_similarThrehold->setValidator(new StrictDoubleValidator(0.0, 1.0, 3, this));
- ui->lineEdit_similarThrehold->setPlaceholderText("请输入, 阈值限制0.0-1.0");
- /* 设置初始化的参数 */
- do_pBtn_restore_clicked();
- /* 连接信号和槽 */
- connect(ui->pBtn_restore, &QPushButton::clicked, this, &AICompareWidget::do_pBtn_restore_clicked);
- /* 设置样式 */
- UIStyle.registerWidget(this);
- }
- AICompareWidget::~AICompareWidget()
- {
- UIStyle.unregisterWidget(this);
- delete ui;
- }
- /* 判断参数是否修改 */
- bool AICompareWidget::isDataChanged()
- {
- bool isSuccess = true;
- /* 判断数据的有效性 */
- if(ui->lineEdit_length->text().isEmpty())
- {
- isSuccess = false;
- setWarn(ui->lineEdit_length, true);
- TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比持续时间不能为空", this);
- }
- if(ui->lineEdit_compareCount->text().isEmpty())
- {
- isSuccess = false;
- setWarn(ui->lineEdit_compareCount, true);
- TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比持续次数不能为空", this);
- }
- if(ui->lineEdit_notSimilarThrehold->text().isEmpty())
- {
- isSuccess = false;
- setWarn(ui->lineEdit_notSimilarThrehold, true);
- TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比不相似度阈值不能为空", this);
- }
- if(ui->lineEdit_similarThrehold->text().isEmpty())
- {
- isSuccess = false;
- setWarn(ui->lineEdit_similarThrehold, true);
- TipWidget::display(TipWidget::OPERATOR_WARN, "AI对比相似度阈值不能为空", this);
- }
- if(isSuccess == false)
- {
- return false;
- }
- m_aiCompareConfig.nAiComputeDuration = ui->lineEdit_length->text().toInt();
- m_aiCompareConfig.nAiCompareCount = ui->lineEdit_compareCount->text().toInt();
- m_aiCompareConfig.fSimilarThrehold = ui->lineEdit_similarThrehold->text().toFloat();
- m_aiCompareConfig.fNotSimilarThrehold = ui->lineEdit_notSimilarThrehold->text().toFloat();
- m_aiCompareConfig.bNoConsistencyAlarmOtherAlarm = ui->checkBox_noConsistencyOtherAlarm->isChecked();
- /* 和历史数据进行对比 */
- const AICompareConfig_t &oldConfig = SysConfig.getAICompareConfig();
- if(m_aiCompareConfig == oldConfig)
- {
- SPDLOG_LOGGER_DEBUG(m_logger, "AI对比配置没有变化,不需要更新");
- return false;
- }
- return true;
- }
- /* 保存配置项 */
- bool AICompareWidget::saveConfig()
- {
- cancelAllWarn();
- if(!isDataChanged())
- {
- return true; // 没有修改,直接返回成功
- }
- /* 将AI对比配置转换成json */
- std::string strJson;
- if(!SysConfig.setAICompareConfigToJson(m_aiCompareConfig, strJson))
- {
- SPDLOG_LOGGER_ERROR(m_logger, "设置AI对比配置转换成JSON失败");
- return false;
- }
- /* 更新数据库信息 */
- if(!m_fromWebAPI->updateSystemConfig(Config_CompareAI, strJson, SysConfig.mapSysConfigDesc[eSystemConfigType::eSCT_CompareAI]))
- {
- SPDLOG_LOGGER_ERROR(m_logger, "更新AI对比配置失败");
- return false;
- }
- /* 更新系统设置 */
- SysConfig.setAICompareConfig(m_aiCompareConfig);
- SPDLOG_LOGGER_DEBUG(m_logger, "AI对比配置更新成功");
- return true;
- }
- /* 恢复配置项 */
- void AICompareWidget::do_pBtn_restore_clicked()
- {
- const AICompareConfig_t &aiConfig = SysConfig.getAICompareConfig();
- ui->lineEdit_length->setText(QString::number(aiConfig.nAiComputeDuration));
- ui->lineEdit_compareCount->setText(QString::number(aiConfig.nAiCompareCount));
- ui->lineEdit_similarThrehold->setText(QString::number(aiConfig.fSimilarThrehold, 'f', 3));
- ui->lineEdit_notSimilarThrehold->setText(QString::number(aiConfig.fNotSimilarThrehold, 'f', 3));
- ui->checkBox_noConsistencyOtherAlarm->setChecked(aiConfig.bNoConsistencyAlarmOtherAlarm);
- }
- /* 设置一个控件报警,边框显示红色
- * 注意:这个功能需要在qss里设置属性[Warn=true],并实现相应的报警样式 */
- void AICompareWidget::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 AICompareWidget::cancelAllWarn()
- {
- setWarn(ui->lineEdit_compareCount, false);
- setWarn(ui->lineEdit_length, false);
- setWarn(ui->lineEdit_notSimilarThrehold, false);
- setWarn(ui->lineEdit_similarThrehold, false);
- }
|