#include "addspecialitem.h" #include "ui_addspecialitem.h" #include #include #include #include "globalinfo.h" #include "ExecPlan.h" #include "customcombobox.h" AddSpecialItem::AddSpecialItem(QWidget *parent) : QDialog(parent), ui(new Ui::AddSpecialItem) { ui->setupUi(this); /* 设置无边框 */ setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); /* 设置底层样式表,让最底层的透明 */ this->setAttribute(Qt::WA_TranslucentBackground); m_logger = spdlog::get("ExecPlan"); if(nullptr == m_logger) { qDebug() << "ExecPlan获取logger失败"; } /* 设置QSS */ QFile file(":/qss/qss/PageExecPlan/AddSpecialItem.qss"); if(file.open(QFile::ReadOnly)) { QString styleSheet = tr(file.readAll()); ui->widget_background->setStyleSheet(styleSheet); file.close(); } else { SPDLOG_LOGGER_ERROR(m_logger,"打开文件失败:{}", file.fileName().toStdString()); } /* 设置combobox下拉框阴影 */ ui->comBox_actionSelect->setViewShadowEffect(); ui->comBox_devSelect->setViewShadowEffect(); /* 获取父指针 */ m_p = dynamic_cast(parent); m_date = QDate::currentDate(); m_loop = new QEventLoop(this); /* 设置遮罩 */ ui->widget->setStyleSheet(R"(Background: rgba(0, 0, 0, 0.4);)"); /* 设置样式 */ // ui->timeEdit->setStyleSheet(R"( // TimeWidget // { // background: #FFFFFF; // border-radius: 4px; // border: 1px solid #E6E9F4; // padding-left:12px; // color: #858EBD; // } // )"); // ui->dateEdit->setStyleSheet(R"( // CalendarDTEdit // { // padding-left:8px; // background: #FFFFFF; // border-radius: 4px; // border: 1px solid #E6E9F4; // } // CalendarDTEdit::drop-down // { // padding-right:8px; // width: 16px; // image: url(:/ESM-8C_ICON/Date.png); // } // )"); ui->timeEdit->setTimeAreaWidth(132); ui->timeEdit->SetMainWindow(this); ui->timeEdit->setTime("00:00:00"); ui->dateEdit->setDisplayFormat("yyyy-MM-dd"); ui->dateEdit->setDate(QDate::currentDate()); // ui->label_dateWarn->hide(); ui->label_timeWarn->hide(); ui->label_devWarn->hide(); ui->label_actionWarn->hide(); /* 添加设备项 */ ui->comBox_devSelect->clear(); for(const auto& it : DevInfo.cfgDevInfo()) { ui->comBox_devSelect->addItem(it->devName); for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++) { ui->comBox_actionSelect->addItem(it1.value()); } } ui->comBox_devSelect->setCurrentIndex(0); m_devName = ui->comBox_devSelect->currentText(); /* 添加动作项 */ ui->comBox_actionSelect->clear(); auto it = DevInfo.cfgDevInfo().value(ui->comBox_devSelect->currentText(),nullptr); if(nullptr != it ) { for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++) { ui->comBox_actionSelect->addItem(it1.value()); } } /* 连接信号和槽 */ connect(ui->pBtn_Close,&QPushButton::clicked,this,&AddSpecialItem::do_close); connect(ui->pBtn_cancel,&QPushButton::clicked,this,&AddSpecialItem::do_close); connect(ui->pBtn_ok,&QPushButton::clicked,this,&AddSpecialItem::do_ok); /* 设备选择 */ connect(ui->comBox_devSelect,QOverload::of(&QComboBox::currentTextChanged),this,[this](){ m_devName = ui->comBox_devSelect->currentText(); /* 根据选择的设备,设置该设备的动作 */ ui->comBox_actionSelect->clear(); auto it = DevInfo.cfgDevInfo().value(ui->comBox_devSelect->currentText(),nullptr); if(nullptr != it ) { /* 将该设备支持的动作设置到选项中 */ for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++) { ui->comBox_actionSelect->addItem(it1.value()); } } }); /* 动作选择 */ connect(ui->comBox_actionSelect,QOverload::of(&QComboBox::currentTextChanged),this,[this](){ m_action = ui->comBox_actionSelect->currentText(); }); // connect(ui->pBtn_selectTime,SIGNAL(clicked()),this,SLOT(do_selectTime())); // connect(ui->pBtn_selectDate,SIGNAL(clicked()),this,SLOT(do_selectDate())); } AddSpecialItem::~AddSpecialItem() { delete ui; } /* 选择时间 */ //void AddSpecialItem::do_selectTime() //{ // auto ct =std::make_shared(this); // /* 出现在框的下面,pBtn_timeStart的坐标是相对于AddNormalTime这个弹框的 */ // int x = this->x()+ui->pBtn_selectTime->x(); // int y = this->y() + ui->pBtn_selectTime->y()+32; // ct->move(x,y); // /* 设置当前显示的时间 */ // ct->setValue(QTime(0,0,0)); // /* 选择结束后的信号和槽 */ // connect(ct.get(),&CustomTimeEdit::signal_timeChanged,this,[this](QTime t){ // ui->pBtn_selectTime->setText(t.toString()); // m_time = t; // }); // ct->exec(); //} /* 选择日期 */ //void AddSpecialItem::do_selectDate() //{ // CDate ce(this); // /* 设置出现位置 */ // int x = this->x() + ui->pBtn_selectDate->x(); // int y = this->y() + ui->pBtn_selectDate->y() + 32; // ce.move(x,y); // /* 选择结束后的信号和槽 */ // connect(&ce,&CDate::signal_DateChanged,[&](QDate date){ // ui->pBtn_selectDate->setText(date.toString("yyyy-MM-dd")); // m_date = date; // m_loop->quit(); // }); // ce.show(); // m_loop->exec(); //} /* 进行查重和关闭页面 */ void AddSpecialItem::do_ok() { ui->label_timeWarn->hide(); ui->label_devWarn->hide(); ui->label_actionWarn->hide(); setComboBoxWarning(ui->comBox_devSelect,false); setComboBoxWarning(ui->comBox_actionSelect, false); setTimeEditWarning(false); /* 检查设备是否为空 */ if(ui->comBox_devSelect->currentText().isEmpty()) { ui->label_devWarn->setText("不能为空!"); ui->label_devWarn->show(); setComboBoxWarning(ui->comBox_devSelect, true); return; } /* 检查动作是否为空 */ if(ui->comBox_actionSelect->currentText().isEmpty()) { ui->label_actionWarn->setText("不能为空!"); ui->label_actionWarn->show(); setComboBoxWarning(ui->comBox_actionSelect, false); } /* 时间和日期赋值 */ m_time = ui->timeEdit->getFormTime(); m_date = ui->dateEdit->date(); /* 检查时间是否为空 */ if(m_time.isNull()) { ui->label_timeWarn->setText("时间为空"); ui->label_timeWarn->show(); setTimeEditWarning(true); return; } /* 进行设备查重 */ bool ret = m_p->judgeDateTimeRepetition(*m_p->m_vecItem[m_p->m_stack->currentIndex()],m_devName,m_date,m_time); if(ret) { ui->label_timeWarn->setText("设备和执行时间重复"); ui->label_timeWarn->show(); setTimeEditWarning(true); return; } /* 发送信号 */ emit signal_AddSpecialItem(m_devName,m_action,m_date,m_time); if(m_loop->isRunning()) { m_loop->quit(); } close(); } /* 在这个函数里检查loop否退出 */ void AddSpecialItem::do_close() { if(m_loop->isRunning()) { m_loop->quit(); } this->close(); } /* 设置选择框报警 */ void AddSpecialItem::setComboBoxWarning(QComboBox* bo, bool flag) { if(flag) { bo->setProperty("Warn", true); } else { bo->setProperty("Warn", false); } bo->style()->unpolish(bo); bo->style()->polish(bo); } /* 设置时间报警 */ void AddSpecialItem::setTimeEditWarning(bool flag) { if(flag) { ui->timeEdit->setProperty("Warn", true); } else { ui->timeEdit->setProperty("Warn", false); } ui->timeEdit->style()->unpolish(ui->timeEdit); ui->timeEdit->style()->polish(ui->timeEdit); }