addnormalitem.cpp 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. #include "addnormalitem.h"
  2. #include "UI/ExecPlan/ui_addnormalitem.h"
  3. #include "ui_addnormalitem.h"
  4. #include <memory>
  5. #include <QDebug>
  6. #include <QListView>
  7. #include "common/globalinfo/globalinfo.h"
  8. #include "CommonModule/time/CustomTimeEdit.h"
  9. #include "ExecPlan.h"
  10. #include "customcombobox.h"
  11. AddNormalItem::AddNormalItem(QWidget *parent) :
  12. QDialog(parent),
  13. ui(new Ui::AddNormalItem)
  14. {
  15. ui->setupUi(this);
  16. /* 设置无边框 */
  17. setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint);
  18. /* 设置底层样式表,让最底层的透明 */
  19. this->setAttribute(Qt::WA_TranslucentBackground);
  20. /* 设置遮罩 */
  21. ui->widget->setStyleSheet(R"(Background: rgba(0, 0, 0, 0.4);)");
  22. m_logger = spdlog::get("ExecPlan");
  23. if(nullptr == m_logger)
  24. {
  25. qDebug() << "ExecPlan获取logger失败";
  26. }
  27. /* 加载QSS */
  28. QFile file(":/qss/qss/PageExecPlan/AddNormalItem.qss");
  29. if(file.open(QIODevice::ReadOnly))
  30. {
  31. QString stylesheet = file.readAll();
  32. ui->widget_background->setStyleSheet(stylesheet);
  33. // this->setStyleSheet(stylesheet);
  34. file.close();
  35. } else
  36. {
  37. SPDLOG_LOGGER_ERROR(m_logger,"ExecPlan AddNormalItem加载QSS失败");
  38. }
  39. /* 设置comboBox阴影 */
  40. ui->comBox_devSelect->setViewShadowEffect();
  41. ui->comBox_actionSelect->setViewShadowEffect();
  42. /* 获取父指针 */
  43. m_p = dynamic_cast<ExecPlan*>(parent);
  44. /* 设置TimeWidget样式 */
  45. // ui->timeEdit->setStyleSheet(R"(
  46. // TimeWidget
  47. // {
  48. // background: #FFFFFF;
  49. // border-radius: 4px;
  50. // border: 1px solid #E6E9F4;
  51. // padding-left:12px;
  52. // color: #858EBD;
  53. // }
  54. // )");
  55. ui->timeEdit->setTimeAreaWidth(132);
  56. ui->timeEdit->SetMainWindow(this);
  57. ui->label_timeWarn->hide();
  58. ui->label_devWarn->hide();
  59. ui->label_actionWarn->hide();
  60. /* 添加设备项 */
  61. ui->comBox_devSelect->clear();
  62. for(const auto& it : DevInfo.cfgDevInfo())
  63. {
  64. ui->comBox_devSelect->addItem(it->devName);
  65. for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++)
  66. {
  67. ui->comBox_actionSelect->addItem(it1.value());
  68. }
  69. }
  70. ui->comBox_devSelect->setCurrentIndex(0);
  71. m_devName = ui->comBox_devSelect->currentText();
  72. /* 添加动作项 */
  73. ui->comBox_actionSelect->clear();
  74. auto it = DevInfo.cfgDevInfo().value(ui->comBox_devSelect->currentText(),nullptr);
  75. if(it != nullptr )
  76. {
  77. for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++)
  78. {
  79. ui->comBox_actionSelect->addItem(it1.value());
  80. }
  81. }
  82. /* 连接信号和槽 */
  83. connect(ui->pBtn_Close,&QPushButton::clicked,this,&QDialog::close);
  84. connect(ui->pBtn_cancel,&QPushButton::clicked,this,&QDialog::close);
  85. connect(ui->pBtn_ok,&QPushButton::clicked,this,&AddNormalItem::do_ok);
  86. connect(ui->pBtn_cancel,&QPushButton::clicked,this,&AddNormalItem::close);
  87. /* 设备选择 */
  88. connect(ui->comBox_devSelect,QOverload<const QString&>::of(&QComboBox::currentTextChanged),this,[this](){
  89. m_devName = ui->comBox_devSelect->currentText();
  90. /* 根据选择的设备,设置该设备的动作 */
  91. ui->comBox_actionSelect->clear();
  92. auto it = DevInfo.cfgDevInfo().value(ui->comBox_devSelect->currentText(),nullptr);
  93. if(it != nullptr )
  94. {
  95. /* 将该设备支持的动作设置到选项中 */
  96. for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++)
  97. {
  98. ui->comBox_actionSelect->addItem(it1.value());
  99. }
  100. }
  101. });
  102. /* 动作选择 */
  103. connect(ui->comBox_actionSelect,QOverload<const QString&>::of(&QComboBox::currentTextChanged),this,[this](){
  104. m_action = ui->comBox_actionSelect->currentText();
  105. });
  106. // connect(ui->pBtn_selectTime,SIGNAL(clicked()),this,SLOT(do_selectTime()));
  107. /* 设置默认时间 */
  108. ui->timeEdit->setTime("00:00:00");
  109. }
  110. AddNormalItem::~AddNormalItem()
  111. {
  112. delete ui;
  113. }
  114. /* 选择时间 */
  115. //void AddNormalItem::do_selectTime()
  116. //{
  117. // auto ct =std::make_shared<CustomTimeEdit>(this);
  118. // /* 设置选择框中的时间 */
  119. // ct->setValue(QTime::fromString(ui->pBtn_selectTime->text(),"hh:mm:ss"));
  120. // /* 出现在框的下面,pBtn_timeStart的坐标是相对于AddNormalTime这个弹框的 */
  121. // int x = this->x()+ui->pBtn_selectTime->x();
  122. // int y = this->y() + ui->pBtn_selectTime->y()+32;
  123. // ct->move(x,y);
  124. // /* 设置当前显示的时间 */
  125. // ct->setValue(QTime(0,0,0));
  126. // /* 选择结束后的信号和槽 */
  127. // connect(ct.get(),&CustomTimeEdit::signal_timeChanged,this,[this](QTime t){
  128. // ui->pBtn_selectTime->setText(t.toString());
  129. // m_time = t;
  130. // });
  131. // ct->exec();
  132. //}
  133. /* 进行查重和关闭页面 */
  134. void AddNormalItem::do_ok()
  135. {
  136. ui->label_timeWarn->hide();
  137. ui->label_devWarn->hide();
  138. ui->label_actionWarn->hide();
  139. setComboBoxWarning(ui->comBox_devSelect,false);
  140. setComboBoxWarning(ui->comBox_actionSelect, false);
  141. setTimeEditWarning(false);
  142. /* 检查设备是否为空 */
  143. if(ui->comBox_devSelect->currentText().isEmpty())
  144. {
  145. ui->label_devWarn->setText("不能为空!");
  146. ui->label_devWarn->show();
  147. setComboBoxWarning(ui->comBox_devSelect, true);
  148. return;
  149. }
  150. /* 检查动作是否为空 */
  151. if(ui->comBox_actionSelect->currentText().isEmpty())
  152. {
  153. ui->label_actionWarn->setText("不能为空!");
  154. ui->label_actionWarn->show();
  155. setComboBoxWarning(ui->comBox_actionSelect, true);
  156. }
  157. /* 时间赋值 */
  158. m_time = ui->timeEdit->getFormTime();
  159. /* 检查时间是否为空 */
  160. if(m_time.isNull())
  161. {
  162. ui->label_timeWarn->setText("不能为空!");
  163. ui->label_timeWarn->show();
  164. setTimeEditWarning(true);
  165. return;
  166. }
  167. /* 进行设备查重 */
  168. bool ret = m_p->judgeTimeRepetition(*m_p->m_vecItem[m_p->m_stack->currentIndex()],m_devName,m_time);
  169. if(ret)
  170. {
  171. ui->label_timeWarn->setText("一个时间点,单个设备仅能执行一个操作!");
  172. ui->label_timeWarn->show();
  173. setTimeEditWarning(true);
  174. return;
  175. }
  176. /* 发送信号 */
  177. emit signal_addNormalItem(m_devName,m_action,m_time);
  178. close();
  179. }
  180. /* 设置选择框报警 */
  181. void AddNormalItem::setComboBoxWarning(QComboBox* bo, bool flag)
  182. {
  183. if(flag)
  184. {
  185. bo->setProperty("Warn", true);
  186. }
  187. else
  188. {
  189. bo->setProperty("Warn", false);
  190. }
  191. bo->style()->unpolish(bo);
  192. bo->style()->polish(bo);
  193. }
  194. /* 设置时间报警 */
  195. void AddNormalItem::setTimeEditWarning(bool flag)
  196. {
  197. if(flag)
  198. {
  199. ui->timeEdit->setProperty("Warn", true);
  200. }
  201. else
  202. {
  203. ui->timeEdit->setProperty("Warn", false);
  204. }
  205. ui->timeEdit->style()->unpolish(ui->timeEdit);
  206. ui->timeEdit->style()->polish(ui->timeEdit);
  207. }