compareitemdialog.cpp 21 KB

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