compareitemdialog.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. #include "compareitemdialog.h"
  2. #include "GlobalVariable.h"
  3. #include "ui_compareitemwidget.h"
  4. #include "UIStyleManager.h"
  5. #include "SoundCardData.h"
  6. #include "tipwidget.h"
  7. #include "commonFunc.h"
  8. #include "commonFunc.h"
  9. #include <QIntValidator>
  10. CompareItemDialog::CompareItemDialog(QWidget *parent)
  11. : DialogBase(parent)
  12. , ui(new Ui::CompareItemWidget)
  13. {
  14. QWidget *widgetContent = new QWidget(this);
  15. ui->setupUi(widgetContent);
  16. /* 设置内容 */
  17. setContentWidget(widgetContent);
  18. /* 设置标题 */
  19. setTitle("对比项信息", QSize(120, 18));
  20. /* 对输入做一些限制 */
  21. setDetectParamInputOnlyNumber();
  22. /* 限制对比项名称长度 */
  23. ui->lineEdit_compareItmName->setMaxLength(15);
  24. /* 设置默认开启 */
  25. ui->checkBoxMute->setChecked(true);
  26. ui->checkBoxOverload->setChecked(true);
  27. ui->checkBoxPhase->setChecked(true);
  28. m_listOtherRoadWgt.clear();
  29. m_listOtherRoadWgt.push_back(ui->widget_mainRoad);
  30. m_listOtherRoadWgt.push_back(ui->widget_secondRoad);
  31. /* 设置可选的声卡通道信息 */
  32. setSoundCardRoadList(SoundCards.getCurrentSoundCardInfo());
  33. /* 连接信号和槽 */
  34. connect(ui->pBtn_add, &QPushButton::clicked, this, &CompareItemDialog::do_pBtn_add_clicked);
  35. /* 连接静音、过载、反相三个按钮的开关 */
  36. connect(ui->checkBoxMute, &QCheckBox::clicked, this, &CompareItemDialog::do_checkBox_MOP_clicked);
  37. connect(ui->checkBoxOverload, &QCheckBox::clicked, this, &CompareItemDialog::do_checkBox_MOP_clicked);
  38. connect(ui->checkBoxPhase, &QCheckBox::clicked, this, &CompareItemDialog::do_checkBox_MOP_clicked);
  39. /* 连接通道的选择信号 */
  40. connect(ui->widget_mainRoad, &SingleCompareRoadWidget::signal_selectRecordRoad, this, &CompareItemDialog::do_selectOneRecordRoad);
  41. connect(ui->widget_secondRoad, &SingleCompareRoadWidget::signal_selectRecordRoad, this, &CompareItemDialog::do_selectOneRecordRoad);
  42. /* 设置样式 */
  43. setQSS();
  44. }
  45. CompareItemDialog::~CompareItemDialog()
  46. {
  47. delete ui;
  48. }
  49. /* 设置可选的声卡通道信息 */
  50. void CompareItemDialog::setSoundCardRoadList(const SoundCardPCMInfo_t& soundCardInfo)
  51. {
  52. m_soundCardInfo = soundCardInfo;
  53. /* 设置已有两个通道的可选录音通道 */
  54. ui->widget_mainRoad->setSoundCardRoadList(m_soundCardInfo);
  55. ui->widget_secondRoad->setSoundCardRoadList(m_soundCardInfo);
  56. }
  57. /* 设置模式,是否是多项编辑 */
  58. void CompareItemDialog::setMultiEditMode(bool multiEdit)
  59. {
  60. m_isMultiEdit = multiEdit;
  61. if(!multiEdit)
  62. {
  63. return;
  64. }
  65. /* 设置对比项名称输入框不可编辑 */
  66. ui->lineEdit_compareItmName->setEnabled(false);
  67. /* 设置通道不可编辑 */
  68. // ui->widget_mainRoad->setMultiEditMode(false);
  69. // ui->widget_secondRoad->setMultiEditMode(false);
  70. /* 删除多余的通道 */
  71. for(auto& widget : m_listOtherRoadWgt)
  72. {
  73. if(widget == ui->widget_mainRoad || widget == ui->widget_secondRoad)
  74. {
  75. widget->setMultiEditMode(false);
  76. continue;
  77. }
  78. delete widget;
  79. widget = nullptr;
  80. }
  81. /* 清空其他自定义选项 */
  82. ui->lineEdit_compareItmName->clear();
  83. m_listOtherRoadWgt.clear();
  84. m_listOtherRoadWgt.push_back(ui->widget_mainRoad);
  85. m_listOtherRoadWgt.push_back(ui->widget_secondRoad);
  86. }
  87. /* 设置对比项名称列表。查重时使用 */
  88. void CompareItemDialog::setCompareItemNameList(const QList<QString>& listItemNames)
  89. {
  90. m_listCompareItemNames = listItemNames;
  91. /* 先去掉自身名称,防止编辑的时候直接报错 */
  92. QString currentName = ui->lineEdit_compareItmName->text();
  93. if(!currentName.isEmpty())
  94. {
  95. m_listCompareItemNames.removeAll(currentName);
  96. }
  97. }
  98. /* 设置默认的参数 */
  99. void CompareItemDialog::setDefaultParams(const CompareItemInfo_t& item)
  100. {
  101. m_compareItemInfo = item; // 保存对比项信息
  102. /* 设置对比项名称 */
  103. ui->lineEdit_compareItmName->setText(item.strName);
  104. /* 设置对比项状态 */
  105. ui->checkBox_enable->setChecked(item.isEnable);
  106. /* 设置静音检测参数,设置文本需要取绝对值 */
  107. ui->checkBoxMute->setChecked(item.paramMute.isEnable);
  108. ui->lineEditMuteLen->setText(QString::number(item.paramMute.nLen));
  109. ui->lineEditMuteSensibility->setText(QString::number(item.paramMute.nSensitivity));
  110. ui->lineEditMuteThreshold->setText(QString::number(std::abs(item.paramMute.threshold.nThreshold)));
  111. /* 设置过载检测参数 */
  112. ui->checkBoxOverload->setChecked(item.paramOverload.isEnable);
  113. ui->lineEditOverloadLen->setText(QString::number(item.paramOverload.nLen));
  114. ui->lineEditOverloadSensibility->setText(QString::number(item.paramOverload.nSensitivity));
  115. ui->lineEditOverloadThreshold->setText(QString::number(std::abs(item.paramOverload.threshold.nThreshold)));
  116. /* 设置反相检测参数 */
  117. ui->checkBoxPhase->setChecked(item.paramPhase.isEnable);
  118. ui->lineEditPhaseLen->setText(QString::number(item.paramPhase.nLen));
  119. ui->lineEditPhaseSensibility->setText(QString::number(item.paramPhase.nSensitivity));
  120. ui->lineEditPhaseThreshold->setText(QString::number(std::abs(item.paramPhase.threshold.dThreshold)));
  121. /* 设置其他通道 */
  122. for(const auto& road : item.mapRoad)
  123. {
  124. if(road.nCompareRoadNum == 1) // 主通道
  125. {
  126. /* 阻塞这个comBoBox发送信号 */
  127. ui->widget_mainRoad->blockSignals(true);
  128. ui->widget_mainRoad->setSoundCardRoadList(m_soundCardInfo);
  129. ui->widget_mainRoad->blockSignals(false);
  130. ui->widget_mainRoad->setDefaultParams(road);
  131. }
  132. else if(road.nCompareRoadNum == 2) // 第二通道
  133. {
  134. ui->widget_secondRoad->blockSignals(true);
  135. ui->widget_secondRoad->setSoundCardRoadList(m_soundCardInfo);
  136. ui->widget_secondRoad->blockSignals(false);
  137. ui->widget_secondRoad->setDefaultParams(road);
  138. }
  139. else if(road.nCompareRoadNum > 2) // 其他通道
  140. {
  141. auto pWgt = addOneRoadWidget(road.nCompareRoadNum, true);
  142. /* 设置默认参数 */
  143. pWgt->setDefaultParams(road);
  144. }
  145. }
  146. }
  147. /* 获取生成的对比项信息 */
  148. CompareItemInfo_t& CompareItemDialog::getCompareItemInfo()
  149. {
  150. return m_compareItemInfo;
  151. }
  152. /* 新增通道 */
  153. void CompareItemDialog::do_pBtn_add_clicked()
  154. {
  155. /* 判断数目是否已经达到最大值,最大就5个通道 */
  156. if(m_listOtherRoadWgt.size() >= 5)
  157. {
  158. TipWidget::display(TipWidget::OPERATOR_WARN, "对比通道数目已达上限", this);
  159. return;
  160. }
  161. /* 从3开始编号,1是主通道,2是第二通道 */
  162. int index = m_listOtherRoadWgt.size() + 1;
  163. addOneRoadWidget(index, true);
  164. }
  165. /* 删除通道 */
  166. void CompareItemDialog::do_CompareRoadWgtDeleted(int nIndex)
  167. {
  168. for(auto& it : m_listOtherRoadWgt)
  169. {
  170. if(it->getIndex() == nIndex)
  171. {
  172. it->setParent(nullptr);
  173. m_listOtherRoadWgt.removeOne(it);
  174. break;
  175. }
  176. }
  177. /* 剩下的重新排序,不排主通道和2通道 */
  178. for(auto& it : m_listOtherRoadWgt)
  179. {
  180. if(it == ui->widget_mainRoad || it == ui->widget_secondRoad)
  181. {
  182. continue;
  183. }
  184. int currentIndex = it->getIndex();
  185. if(currentIndex > nIndex)
  186. {
  187. it->setIndex(currentIndex - 1);
  188. }
  189. }
  190. }
  191. /* 静音、过载、反相检测条件开关 */
  192. void CompareItemDialog::do_checkBox_MOP_clicked(bool checked)
  193. {
  194. /* 获取信号发送者 */
  195. QCheckBox *checkBox = qobject_cast<QCheckBox*>(sender());
  196. checkBox->setText(checked ? "开启" : "关闭");
  197. if(checkBox == ui->checkBoxMute)
  198. {
  199. setMOPEditable(EDBType::DBType_Mute, checked);
  200. }
  201. else if(checkBox == ui->checkBoxOverload)
  202. {
  203. setMOPEditable(EDBType::DBType_Overload, checked);
  204. }
  205. else if(checkBox == ui->checkBoxPhase)
  206. {
  207. setMOPEditable(EDBType::DBType_Phase, checked);
  208. }
  209. }
  210. /* 选择了一个录音通道,判断有没有重复的,有则去掉重复的 */
  211. void CompareItemDialog::do_selectOneRecordRoad(QString strPCMName)
  212. {
  213. auto sender = qobject_cast<SingleCompareRoadWidget*>(QObject::sender());
  214. /* 只在release模式下生效,debug可以设置重复的,方便测试 */
  215. #if C_RELEASE
  216. /* 判断是否重复 */
  217. for(auto& it : m_listOtherRoadWgt)
  218. {
  219. if(it == sender)
  220. {
  221. continue;
  222. }
  223. if(it->getCurrentPCMName() == strPCMName)
  224. {
  225. it->clearCurrentSelectRecordName();
  226. }
  227. }
  228. #endif
  229. }
  230. /* 设置样式表 */
  231. void CompareItemDialog::setQSS()
  232. {
  233. QString qssPath = UIStyle.getQSSPath() + "/compareitemwidget.qss";
  234. QFile file(qssPath);
  235. if(file.open(QFile::ReadOnly))
  236. {
  237. QString qss = file.readAll();
  238. file.close();
  239. /* 这里设置的是内容容器样式表,this是最外层的 */
  240. getContentWidget()->setStyleSheet(qss);
  241. ui->scrollArea->setStyleSheet(qss);
  242. ui->scrollAreaWidgetContents->setStyleSheet(qss);
  243. } else
  244. {
  245. SPDLOG_LOGGER_ERROR(m_logger, "打开QSS文件失败: {}", qssPath.toStdString());
  246. SPDLOG_LOGGER_ERROR(m_logger, "错误信息: {}", file.errorString().toStdString());
  247. }
  248. /* 打开对比项通道的qss */
  249. file.setFileName(UIStyle.getQSSPath() + "/singlecompareroadwidget.qss");
  250. if(file.open(QFile::ReadOnly))
  251. {
  252. m_qssRecordRoad = file.readAll();
  253. file.close();
  254. } else
  255. {
  256. SPDLOG_LOGGER_ERROR(m_logger, "打开QSS文件失败: {}", file.fileName().toStdString());
  257. SPDLOG_LOGGER_ERROR(m_logger, "错误信息: {}", file.errorString().toStdString());
  258. }
  259. ui->widget_mainRoad->setQSS(m_qssRecordRoad);
  260. ui->widget_secondRoad->setQSS(m_qssRecordRoad);
  261. }
  262. /* 重载按下关闭按钮之前的操作 */
  263. bool CompareItemDialog::isOKClicked()
  264. {
  265. /* 先取消所有的报警 */
  266. cancelAllWarn();
  267. /* 获取对比项的信息 */
  268. if(!getCompareItemBaseInfo(m_compareItemInfo))
  269. {
  270. return false;
  271. }
  272. /* 获取录音通道信息 */
  273. if(!getCompareRoadInfo(m_compareItemInfo))
  274. {
  275. return false;
  276. }
  277. /* 获取音频检测信息 */
  278. if(!getAudioDetectInfo(m_compareItemInfo))
  279. {
  280. return false;
  281. }
  282. return true;
  283. }
  284. /* 设置静音过载反相可编辑 */
  285. void CompareItemDialog::setMOPEditable(EDBType type, bool editable)
  286. {
  287. if(type == EDBType::DBType_Mute)
  288. {
  289. if(editable)
  290. {
  291. ui->lineEditMuteLen->setEnabled(true);
  292. ui->lineEditMuteSensibility->setEnabled(true);
  293. ui->lineEditMuteThreshold->setEnabled(true);
  294. }else {
  295. ui->lineEditMuteLen->setEnabled(false);
  296. ui->lineEditMuteSensibility->setEnabled(false);
  297. ui->lineEditMuteThreshold->setEnabled(false);
  298. }
  299. }
  300. else if(type == EDBType::DBType_Overload)
  301. {
  302. if(editable)
  303. {
  304. ui->lineEditOverloadLen->setEnabled(true);
  305. ui->lineEditOverloadSensibility->setEnabled(true);
  306. ui->lineEditOverloadThreshold->setEnabled(true);
  307. }else {
  308. ui->lineEditOverloadLen->setEnabled(false);
  309. ui->lineEditOverloadSensibility->setEnabled(false);
  310. ui->lineEditOverloadThreshold->setEnabled(false);
  311. }
  312. }
  313. else if(type == EDBType::DBType_Phase)
  314. {
  315. if(editable)
  316. {
  317. ui->lineEditPhaseLen->setEnabled(true);
  318. ui->lineEditPhaseSensibility->setEnabled(true);
  319. ui->lineEditPhaseThreshold->setEnabled(true);
  320. }else {
  321. ui->lineEditPhaseLen->setEnabled(false);
  322. ui->lineEditPhaseSensibility->setEnabled(false);
  323. ui->lineEditPhaseThreshold->setEnabled(false);
  324. }
  325. }
  326. }
  327. /* 设置检测参数输入栏只能输入数字 */
  328. void CompareItemDialog::setDetectParamInputOnlyNumber()
  329. {
  330. // 静音参数,只允许输入1~1000的整数
  331. // QRegularExpression rx1("-[4-8][0-9]");
  332. // ui->lineEditMuteThreshold->setValidator(new QRegularExpressionValidator(rx1, this));
  333. // StrictDoubleValidator
  334. ui->lineEditMuteThreshold->setValidator(new StrictIntValidator(m_silenceThresholdLow, m_silenceThresholdHigh, this));
  335. ui->lineEditMuteLen->setValidator(new StrictIntValidator(m_silenceDurationLow, m_silenceDurationHigh, this));
  336. ui->lineEditMuteSensibility->setValidator(new StrictIntValidator(m_silenceSensitivityLow, m_silenceSensitivityHigh, this));
  337. // 过载参数
  338. ui->lineEditOverloadThreshold->setValidator(new StrictIntValidator(m_overloadThresholdLow, m_overloadThresholdHigh, this));
  339. ui->lineEditOverloadLen->setValidator(new StrictIntValidator(m_overloadDurationLow, m_overloadDurationHigh, this));
  340. ui->lineEditOverloadSensibility->setValidator(new StrictIntValidator(m_overloadSensitivityLow, m_overloadSensitivityHigh, this));
  341. // 反相参数,阈值为浮点数,范围0.0~0.99
  342. ui->lineEditPhaseThreshold->setValidator(new StrictDoubleValidator(m_phaseThresholdLow, m_phaseThresholdHigh, 3, this));
  343. ui->lineEditPhaseLen->setValidator(new QIntValidator(m_phaseDurationLow, m_phaseDurationHigh, this));
  344. ui->lineEditPhaseSensibility->setValidator(new QIntValidator(m_phaseSensitivityLow, m_phaseSensitivityHigh, this));
  345. }
  346. /* 新增一个通道 */
  347. SingleCompareRoadWidget* CompareItemDialog::addOneRoadWidget(int nIndex, bool bDelBtnVisible)
  348. {
  349. QVBoxLayout* pLayout = qobject_cast<QVBoxLayout*>(ui->scrollAreaWidgetContents->layout());
  350. if(pLayout == nullptr)
  351. {
  352. SPDLOG_LOGGER_ERROR(m_logger, "滚动区域内容布局未设置,无法添加通道");
  353. return nullptr;
  354. }
  355. SingleCompareRoadWidget *pWgt = new SingleCompareRoadWidget(this);
  356. pWgt->setIndex(nIndex);
  357. pWgt->setDelBtnVisible(bDelBtnVisible);
  358. /* 设置可选通道列表 */
  359. pWgt->setSoundCardRoadList(m_soundCardInfo);
  360. pWgt->setQSS(m_qssRecordRoad);
  361. pLayout->insertWidget(m_listOtherRoadWgt.size() - 2, pWgt);
  362. connect(pWgt, &SingleCompareRoadWidget::deleted, this, &CompareItemDialog::do_CompareRoadWgtDeleted);
  363. connect(pWgt, &SingleCompareRoadWidget::signal_selectRecordRoad, this, &CompareItemDialog::do_selectOneRecordRoad);
  364. m_listOtherRoadWgt.append(pWgt);
  365. return pWgt;
  366. }
  367. /* 获取对比项的基础信息 */
  368. bool CompareItemDialog::getCompareItemBaseInfo(CompareItemInfo_t& compareItemInfo)
  369. {
  370. if(!m_isMultiEdit)
  371. {
  372. if(ui->lineEdit_compareItmName->text().isEmpty())
  373. {
  374. setWarn(ui->lineEdit_compareItmName, true);
  375. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项名称不能为空", this);
  376. return false;
  377. }
  378. /* 检查名称和现有的是否重复 */
  379. if(m_listCompareItemNames.contains(ui->lineEdit_compareItmName->text()))
  380. {
  381. setWarn(ui->lineEdit_compareItmName, true);
  382. TipWidget::display(TipWidget::OPERATOR_WARN, "对比项名称已存在", this);
  383. return false;
  384. }
  385. }
  386. compareItemInfo.strName = ui->lineEdit_compareItmName->text();
  387. compareItemInfo.isEnable = ui->checkBox_enable->isChecked();
  388. return true;
  389. }
  390. /* 获取各个通道信息 */
  391. bool CompareItemDialog::getCompareRoadInfo(CompareItemInfo_t& compareItemInfo)
  392. {
  393. compareItemInfo.mapRoad.clear();
  394. /* 获取其他通道信息 */
  395. for(SingleCompareRoadWidget* roadWgt : m_listOtherRoadWgt)
  396. {
  397. CompareItemRoadInfo_t otherRoadInfo;
  398. otherRoadInfo.strCompareRoadName = roadWgt->getRoadName();
  399. otherRoadInfo.nCompareRoadNum = roadWgt->getIndex();
  400. otherRoadInfo.isEnableRecord = roadWgt->isRecordEnabled();
  401. otherRoadInfo.scRoadInfo = roadWgt->getSoundCardRoadInfo();
  402. if(otherRoadInfo.strCompareRoadName.isEmpty())
  403. {
  404. roadWgt->setRoadNameWarn(true);
  405. TipWidget::display(TipWidget::OPERATOR_WARN, QString("第%1通道名称不能为空").arg(otherRoadInfo.nCompareRoadNum), this);
  406. return false;
  407. }
  408. compareItemInfo.mapRoad.insert(otherRoadInfo.nCompareRoadNum, otherRoadInfo);
  409. }
  410. /* 判断通道名称是否重复 */
  411. bool isDuplicate = false;
  412. for(auto& widget1 : m_listOtherRoadWgt)
  413. {
  414. for(auto& widget2 : m_listOtherRoadWgt)
  415. {
  416. if(widget1 == widget2)
  417. {
  418. continue;
  419. }
  420. if(widget1->getRoadName() == widget2->getRoadName())
  421. {
  422. isDuplicate = true;
  423. widget1->setRoadNameWarn(true);
  424. widget2->setRoadNameWarn(true);
  425. break;
  426. }
  427. }
  428. }
  429. if(isDuplicate)
  430. {
  431. TipWidget::display(TipWidget::OPERATOR_WARN, QString("通道名称重复"), this);
  432. return false;
  433. }
  434. /* 判断是否选择声卡通道信息 */
  435. bool isSelectSoundCard = true;
  436. for(auto& widget : m_listOtherRoadWgt)
  437. {
  438. if(widget->getCurrentPCMName().isEmpty())
  439. {
  440. widget->setSoundCardWarn(true);
  441. TipWidget::display(TipWidget::OPERATOR_WARN, QString("请选择%1通道的声卡录音通道").arg(widget->getIndex()), this);
  442. isSelectSoundCard = false;
  443. }
  444. }
  445. if(isSelectSoundCard == false)
  446. {
  447. return false;
  448. }
  449. return true;
  450. }
  451. /* 获取音频检测信息 */
  452. bool CompareItemDialog::getAudioDetectInfo(CompareItemInfo_t& compareItemInfo)
  453. {
  454. int silenceThreshold = ui->lineEditMuteThreshold->text().toULongLong();
  455. int silenceDuration = ui->lineEditMuteLen->text().toInt();
  456. int silenceSensitivity = ui->lineEditMuteSensibility->text().toInt();
  457. int overloadThreshold = ui->lineEditOverloadThreshold->text().toULongLong();
  458. int overloadDuration = ui->lineEditOverloadLen->text().toInt();
  459. int overloadSensitivity = ui->lineEditOverloadSensibility->text().toInt();
  460. double phaseThreshold = ui->lineEditPhaseThreshold->text().toDouble();
  461. int phaseDuration = ui->lineEditPhaseLen->text().toInt();
  462. int phaseSensitivity = ui->lineEditPhaseSensibility->text().toInt();
  463. /* 检测是否在范围内 */
  464. bool isOverThreshold = false;
  465. /* 检查静音参数 */
  466. if(silenceThreshold < m_silenceThresholdLow || silenceThreshold > m_silenceThresholdHigh)
  467. {
  468. setWarn(ui->lineEditMuteThreshold, true);
  469. isOverThreshold = true;
  470. }
  471. if(silenceDuration < m_silenceDurationLow || silenceDuration > m_silenceDurationHigh)
  472. {
  473. setWarn(ui->lineEditMuteLen, true);
  474. isOverThreshold = true;
  475. }
  476. if(silenceSensitivity < m_silenceSensitivityLow || silenceSensitivity > m_silenceSensitivityHigh)
  477. {
  478. setWarn(ui->lineEditMuteSensibility, true);
  479. isOverThreshold = true;
  480. }
  481. /* 检查过载参数 */
  482. if(overloadThreshold < m_overloadThresholdLow || overloadThreshold > m_overloadThresholdHigh)
  483. {
  484. setWarn(ui->lineEditOverloadThreshold, true);
  485. isOverThreshold = true;
  486. }
  487. if(overloadDuration < m_overloadDurationLow || overloadDuration > m_overloadDurationHigh)
  488. {
  489. setWarn(ui->lineEditOverloadLen, true);
  490. isOverThreshold = true;
  491. }
  492. if(overloadSensitivity < m_overloadSensitivityLow || overloadSensitivity > m_overloadSensitivityHigh)
  493. {
  494. setWarn(ui->lineEditOverloadSensibility, true);
  495. isOverThreshold = true;
  496. }
  497. /* 检查反向参数 */
  498. if(phaseThreshold < m_phaseThresholdLow || phaseThreshold > m_phaseThresholdHigh)
  499. {
  500. setWarn(ui->lineEditPhaseThreshold, true);
  501. isOverThreshold = true;
  502. }
  503. if(phaseDuration < m_phaseDurationLow || phaseDuration > m_phaseDurationHigh)
  504. {
  505. setWarn(ui->lineEditPhaseLen, true);
  506. isOverThreshold = true;
  507. }
  508. if(phaseSensitivity < m_phaseSensitivityLow || phaseSensitivity > m_phaseSensitivityHigh)
  509. {
  510. setWarn(ui->lineEditPhaseSensibility, true);
  511. isOverThreshold = true;
  512. }
  513. if(isOverThreshold)
  514. {
  515. TipWidget::display(TipWidget::OPERATOR_WARN, QString("检测参数超出范围"), this);
  516. return false;
  517. }
  518. /* 静音检测,注意阈值是负数,在输入框中是正数,这里需要转换一下 */
  519. compareItemInfo.paramMute.isEnable = ui->checkBoxMute->isChecked();
  520. compareItemInfo.paramMute.threshold.nThreshold = -silenceThreshold;
  521. compareItemInfo.paramMute.nLen = silenceDuration;
  522. compareItemInfo.paramMute.nSensitivity = silenceSensitivity;
  523. /* 过载检测 */
  524. compareItemInfo.paramOverload.isEnable = ui->checkBoxOverload->isChecked();
  525. compareItemInfo.paramOverload.threshold.nThreshold = -overloadThreshold;
  526. compareItemInfo.paramOverload.nLen = overloadDuration;
  527. compareItemInfo.paramOverload.nSensitivity = overloadSensitivity;
  528. /* 反相检测 */
  529. compareItemInfo.paramPhase.isEnable = ui->checkBoxPhase->isChecked();
  530. compareItemInfo.paramPhase.threshold.dThreshold = -phaseThreshold;
  531. compareItemInfo.paramPhase.nLen = phaseDuration;
  532. compareItemInfo.paramPhase.nSensitivity = phaseSensitivity;
  533. return true;
  534. }
  535. /* 取消所有的报警 */
  536. void CompareItemDialog::cancelAllWarn()
  537. {
  538. setWarn(ui->lineEdit_compareItmName, false);
  539. for(SingleCompareRoadWidget* roadWgt : m_listOtherRoadWgt)
  540. {
  541. roadWgt->setRoadNameWarn(false);
  542. roadWgt->setSoundCardWarn(false);
  543. }
  544. /* 取消检测参数的报警红框 */
  545. setWarn(ui->lineEditMuteThreshold, false);
  546. setWarn(ui->lineEditMuteLen, false);
  547. setWarn(ui->lineEditMuteSensibility, false);
  548. setWarn(ui->lineEditOverloadThreshold, false);
  549. setWarn(ui->lineEditOverloadLen, false);
  550. setWarn(ui->lineEditOverloadSensibility, false);
  551. setWarn(ui->lineEditPhaseThreshold, false);
  552. setWarn(ui->lineEditPhaseLen, false);
  553. setWarn(ui->lineEditPhaseSensibility, false);
  554. }