123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384 |
- #include "ExecPlanItem.h"
- #include <QDebug>
- #include <QEvent>
- #include <QMouseEvent>
- #include <QListView>
- #include <QVariant>
- ExecPlanItem::ExecPlanItem(int weekDay, QWidget *parent) : QWidget(parent), m_weekDay(weekDay)
- {
- this->setMinimumHeight(48);
- if(m_weekDay < 7)
- {
- m_dateType = DateType::NormalDate;
- } else
- {
- m_dateType = DateType::SpecialDate;
- }
- m_logger = spdlog::get("ExecPlan");
- if(nullptr == m_logger)
- {
- qDebug() << "ExecPlan获取logger失败";
- }
- /* 变量初始化 */
- m_date.setDate(0,0,0);
- m_execTime.setHMS(0,0,0);
- m_devName.clear();
- m_actionName.clear();
- /* UI图标初始化 */
- m_labelWarning = new QLabel(this);
- m_warnTimer = new QTimer(this);
- m_labelNum = new QLabel(this);
- m_labelDate = new QLabel(this);
- m_labelExecTime = new QLabel(this);
- m_delete = new QLabel(this);
- m_labelDateIcon = new QLabel(this);
- m_labelTimeIcon = new QLabel(this);
- m_comBoxDev = new CustomComboBox(this);
- m_comBoxAction = new CustomComboBox(this);
- /* 设置大小和布局 */
- int w = m_dateType == DateType::NormalDate ? 828 : 976;
- resize(w,48);
- m_labelNum->resize(80,32);
- m_comBoxDev->resize(260,32);
- m_labelDate->resize(132,32);
- m_labelDateIcon->resize(16,16);
- m_labelDate->setText("2024-4-22");
- m_comBoxAction->resize(260,32);
- m_labelExecTime->resize(132,32);
- m_labelExecTime->setText("00:00:00");
- m_labelTimeIcon->resize(16,16);
- m_delete->resize(32,32);
- /* 警告label */
- m_labelWarning->resize(300,16);
- m_labelWarning->move(96,0);
- /* 根据是否是特殊日布局 */
- if(m_dateType == DateType::NormalDate)
- {
- m_labelDate->hide();
- m_labelDateIcon->hide();
- m_labelNum->move(0,16);
- m_comBoxDev->move(96,16);
- m_labelExecTime->move(372,16);
- m_labelTimeIcon->move(480,24);
- m_comBoxAction->move(520,16);
- m_delete->move(796,16);
- }else
- {
- m_labelNum->move(0,16);
- m_comBoxDev->move(96,16);
- m_labelDate->move(372,16);
- m_labelDateIcon->move(480,24);
- m_labelExecTime->move(520,16);
- m_labelTimeIcon->move(628,24);
- m_comBoxAction->move(668,16);
- m_delete->move(944,16);
- }
- /* 设置样式表 */
- m_labelNum->setObjectName("Num");
- m_labelDate->setObjectName("Date");
- m_labelDateIcon->setObjectName("DateIcon");
- m_labelExecTime->setObjectName("ExecTime");
- m_labelTimeIcon->setObjectName("TimeIcon");
- m_delete->setObjectName("Delete");
- m_labelWarning->setObjectName("Warning");
- m_comBoxDev->setObjectName("Dev");
- m_comBoxAction->setObjectName("Action");
- /* 加载QSS */
- QFile file(":/qss/qss/PageExecPlan/ExecPlanItem.qss");
- if(file.open(QFile::ReadOnly))
- {
- QString styleSheet = file.readAll();
- this->setStyleSheet(styleSheet);
- file.close();
- }else
- {
- SPDLOG_LOGGER_ERROR(m_logger,"打开QSS文件失败");
- }
- /* 设置comboBox下拉框阴影 */
- m_comBoxDev->setViewShadowEffect();
- m_comBoxAction->setViewShadowEffect();
-
- /* 警告定时器设置 */
- m_warnTimer->setInterval(5000);
- m_warnTimer->setSingleShot(true);
- connect(m_warnTimer,&QTimer::timeout,this,[this](){
- m_labelWarning->hide();
- });
- /* 将时间和日期图标设置到底层,不影响点击 */
- m_labelDateIcon->lower();
- m_labelTimeIcon->lower();
- /* 注册事件过滤 */
- m_delete->installEventFilter(this);
- m_labelDate->installEventFilter(this);
- m_labelExecTime->installEventFilter(this);
- m_comBoxDev->installEventFilter(this);
- m_comBoxAction->installEventFilter(this);
- /* 连接信号和槽 */
- connect(m_comBoxDev,QOverload<const QString&>::of(&QComboBox::textActivated),this, &ExecPlanItem::do_devChanged);
- connect(m_comBoxAction,QOverload<const QString&>::of(&QComboBox::currentTextChanged),this,&ExecPlanItem::do_actionChanged);
- }
- /* 删除前,取消所有关联的信号和槽 */
- ExecPlanItem::~ExecPlanItem()
- {
- disconnect(this);
- }
- /* 设置序号 */
- void ExecPlanItem::setNum(int num)
- {
- m_num = num;
- m_labelNum->setText(QString::asprintf("%d",num));
- }
- /* 获取序号 */
- int ExecPlanItem::getNum()
- {
- return m_num;
- }
- /* 设置日期 */
- void ExecPlanItem::setDate(const QDate &date)
- {
- m_date = date;
- m_labelDate->setText(m_date.toString("yyyy-MM-dd"));
- }
- /* 获取日期 */
- QDate ExecPlanItem::getDate()
- {
- return m_date;
- }
- /* 设置开始时间 */
- void ExecPlanItem::setExecTime(const QTime &time)
- {
- m_execTime = time;
- m_labelExecTime->setText(m_execTime.toString());
- }
- /* 获取开始时间 */
- QTime ExecPlanItem::getExecTime() const
- {
- return m_execTime;
- }
- /**
- * @brief 设置警告
- * @param str 警告的内容
- * @param ms 如果设置成0,将不启动定时器,一直显示警告内容
- */
- void ExecPlanItem::setWarningText(QString str,int ms)
- {
- m_labelWarning->setText(str);
- m_labelWarning->show();
- if(ms > 0)
- {
- m_warnTimer->start(ms);
- }
- }
- /* 设置设备名称 */
- void ExecPlanItem::setDevName(const QString &dev)
- {
- m_devName = dev;
- /* 寻找指向这个名称的设备信息 */
- // m_cfgDev = DevInfo.cfgDevInfo().value(dev);
- m_cfgDev = DevInfo.findCfgDev(dev);
- /* 先屏蔽信号,防止添加项的过程中,乱发信号 */
- QSignalBlocker bl(m_comBoxDev);
- m_comBoxDev->clear();
- for(const auto& it : DevInfo.cfgDevInfo())
- {
- m_comBoxDev->addItem(it->devName);
- }
- m_comBoxDev->setCurrentText(m_devName);
- /* 设置相应的动作 */
- setActionName();
- // SPDLOG_LOGGER_INFO(m_logger,"m_devName:{},当前项是:{}",m_devName.toStdString(),m_comBoxDev->currentText().toStdString());
- }
- /* 获取设备名称 */
- QString ExecPlanItem::getDevName() const
- {
- return m_devName;
- }
- /* 只修改设备名称,不修改设备类型,用于修改了设备名称,同步过来更新 */
- void ExecPlanItem::changeDevName(const QString &name)
- {
- if(m_cfgDev->devName == name)
- {
- m_devName = name;
- m_comBoxDev->setCurrentText(name);
- }else
- {
- SPDLOG_LOGGER_WARN(m_logger,"修改后的设备名称和配置文件中不同:{}",name.toStdString());
- }
- }
- /**
- * @brief 根据选择的设备设置相应的动作选项
- * @param action
- */
- void ExecPlanItem::setActionName(const QString &action)
- {
- m_actionName = action;
- m_comBoxAction->clear();
- /* 获取这个设备 */
- auto it = DevInfo.cfgDevInfo().value(m_comBoxDev->currentText(),nullptr);
- if(nullptr != it)
- {
- for(auto it1 = it->DevType.getDevAction().begin(); it1 != it->DevType.getDevAction().end(); it1++)
- {
- m_comBoxAction->addItem(it1.value(), static_cast<int>(it1.key()));
- }
- }
- // SPDLOG_LOGGER_DEBUG(m_logger,"当前Action:{}",m_action.toStdString());
- m_comBoxAction->setCurrentText(action);
- m_actionID = m_comBoxAction->currentData().toInt();
- }
- /* 通过动作类型设置动作 */
- void ExecPlanItem::setActionNum(int action)
- {
- }
- /* 设置动作,只设置可选择的动作类型 */
- void ExecPlanItem::setActionName()
- {
- QString curAction = m_comBoxAction->currentText();
- m_comBoxAction->clear();
- auto it = DevInfo.cfgDevInfo().value(m_comBoxDev->currentText(),nullptr);
- if(nullptr != it)
- {
- for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++)
- {
- m_comBoxAction->addItem(it1.value(), static_cast<int>(it1.key()));
- }
- }
- m_comBoxAction->setCurrentText(curAction);
- }
- /* 获取动作 */
- QString ExecPlanItem::getActionName()
- {
- return m_actionName;
- }
- /* 获取动作类型 */
- int ExecPlanItem::getActionNum()
- {
- return m_actionID;
- }
- /* 获取日期类型 */
- DateType ExecPlanItem::getDateType()
- {
- return m_dateType;
- }
- /* 隐藏警告 */
- void ExecPlanItem::hideWarn()
- {
- m_labelWarning->hide();
- }
- /* 获取设备信息 */
- ConfigurationDevInfo *ExecPlanItem::getCfgDev()
- {
- return m_cfgDev;
- }
- /* 设备改变了,动作选项也跟着改变 */
- void ExecPlanItem::do_devChanged(QString devName)
- {
- SPDLOG_LOGGER_DEBUG(m_logger,"更改Action,devName:{}",devName.toStdString());
- /* 根据选择的设备,设置该设备的动作 */
- m_comBoxAction->clear();
- auto it = DevInfo.findCfgDev(devName);
- // SPDLOG_LOGGER_DEBUG(m_logger,"更改Action,devName:{}, it:{}",devName.toStdString(),it->devName.toStdString());
- if(nullptr != it)
- {
- m_cfgDev = it;
- /* 将该设备支持的动作设置到选项中 */
- for(auto it1 = it->DevType.getDevAction().begin();it1 != it->DevType.getDevAction().end();it1++)
- {
- m_comBoxAction->addItem(it1.value(), static_cast<int>(it1.key()));
- }
- }else
- {
- SPDLOG_LOGGER_INFO(m_logger,"没有这个设备:{}",devName.toStdString());
- return;
- }
- m_devName = devName;
- emit signal_devChanged();
- }
- /* 动作改变了 */
- void ExecPlanItem::do_actionChanged(QString action)
- {
- m_actionName = action;
- m_actionID = m_comBoxAction->currentData().toInt();
- }
- /**
- * @brief 监测点击相关的label
- * @param watched
- * @param event
- * @return
- */
- bool ExecPlanItem::eventFilter(QObject *watched, QEvent *event)
- {
- /* 关闭图标 */
- if(watched == m_delete && event->type() == QEvent::MouseButtonPress)
- {
- auto e = static_cast<QMouseEvent *>(event);
- if(e->button() == Qt::LeftButton)
- {
- emit signal_OneItemDelete(m_num);
- return true;
- }
- }
- /* 点击日期 */
- else if(watched == m_labelDate && event->type() == QEvent::MouseButtonPress)
- {
- auto e = static_cast<QMouseEvent *>(event);
- if(e->button() == Qt::LeftButton)
- {
- emit signal_dateClicked(m_date);
- return true;
- }
- }
- /* 点击执行时间 */
- else if(watched == m_labelExecTime && event->type() == QEvent::MouseButtonPress)
- {
- auto e = static_cast<QMouseEvent *>(event);
- if(e->button() == Qt::LeftButton)
- {
- emit signal_execTimeClicked(m_execTime);
- return true;
- }
- }
- /* 滚轮事件 */
- else if(event->type() == QEvent::Wheel)
- {
- return true;
- }
- return QWidget::eventFilter(watched,event);
- }
- /* 禁用这个项中所有的滚轮时间,这个不起效果 */
- //void ExecPlanItem::wheelEvent(QWheelEvent *event)
- //{
- // return;
- //}
|