#include "oneitem.h" #include "ui_oneitem.h" #include #include "LHQLogAPI.h" #include "TransmitterSwitchInfo.h" #include "customcombobox.h" // #include "lhstylemanager.h" OneItem::OneItem(QWidget *parent, bool isSpecial) : QWidget(parent), m_isSpecial(isSpecial), ui(new Ui::OneItem) { ui->setupUi(this); init(); } OneItem::OneItem(bool isSpecial) : QWidget(nullptr), m_isSpecial(isSpecial), ui(new Ui::OneItem) { ui->setupUi(this); init(); } OneItem::~OneItem() { // LHStyleManager::Instance()->RemoveWidget(this); delete ui; } /* 初始化 */ void OneItem::init() { QString qssPath = EPConfig.getQSSPath() + "/oneitem.qss"; /* 加载QSS */ QFile file(qssPath); if(file.open(QIODevice::ReadOnly)) { QString stylesheet = file.readAll(); this->setStyleSheet(stylesheet); file.close(); } else { LH_WRITE_ERROR(QString("打开文件失败:%1").arg(file.fileName())); } // LHStyleManager::Instance()->AddWidget(this); /* 设置背景透明 */ this->setAttribute(Qt::WA_TranslucentBackground); /* 设置无边框 */ this->setWindowFlags(Qt::FramelessWindowHint); /* 设置定时器 */ m_warnTimer.setTimerType(Qt::PreciseTimer); m_warnTimer.setSingleShot(true); connect(&m_warnTimer, &QTimer::timeout, this, &OneItem::hideWarn); /* 初始化变量 */ m_uuid = QUuid::createUuid(); setExecTime(QTime(0,0,0)); setDate(QDate(1970,1,1)); /* 根据是否是特殊日移动位置 */ layoutInit(); /* 设置下拉框背景 */ ui->comboBox_devName->setViewShadowEffect(); ui->comboBox_action->setViewShadowEffect(); /* 注册事件过滤器 */ ui->comboBox_devName->installEventFilter(this); ui->comboBox_action->installEventFilter(this); ui->pBtn_close->installEventFilter(this); /* 连接信号和槽 */ connect(ui->comboBox_devName,QOverload::of(&QComboBox::currentTextChanged),this,&OneItem::do_devChanged); connect(ui->comboBox_action,QOverload::of(&QComboBox::currentTextChanged),this,&OneItem::do_actionChanged); connect(ui->pBtn_execTime,&QPushButton::clicked,this,&OneItem::do_pBtn_execTime_clicked); connect(ui->pBtn_iconTime,&QPushButton::clicked,this,&OneItem::do_pBtn_execTime_clicked); connect(ui->pBtn_execDate,&QPushButton::clicked,this,&OneItem::do_pBtn_execDate_clicked); connect(ui->pBtn_iconDate,&QPushButton::clicked,this,&OneItem::do_pBtn_execDate_clicked); connect(ui->pBtn_close, &QPushButton::clicked, this, &OneItem::do_pBtn_close_clicked); /* 连接切换样式表的信号和槽 */ connect(&EPConfig, &ExecPlanGlobalConfig::signal_oneItemQssChanged, this, &OneItem::do_setQSS); } /* 设置序号 */ void OneItem::setNum(int num) { m_num = num; ui->label_num->setText(QString::number(num)); } /* 获取序号 */ int OneItem::getNum() { return m_num; } /* 设置日期 */ void OneItem::setDate(const QDate& date) { m_date = date; ui->pBtn_execDate->setText(date.toString("yyyy-MM-dd")); } /* 获取日期 */ QDate OneItem::getDate() { return m_date; } /* 设置执行时间 */ void OneItem::setExecTime(const QTime& time) { m_time = time; ui->pBtn_execTime->setText(time.toString("hh:mm:ss")); } /* 获取执行时间 */ QTime OneItem::getExecTime() { return m_time; } /* 设置设备名称 */ void OneItem::setDevName(const QString& dev) { ui->comboBox_devName->setCurrentText(dev); } /* 获取设备名称 */ QString OneItem::getDevName() { return ui->comboBox_devName->currentText(); } /* 添加设备支持的动作 */ void OneItem::addActions() { auto acts = DevTypeContainer.getDevType(m_devInfo.PTTypeCode); ui->comboBox_action->clear(); if(acts.PTTypeCode > 0) { for(auto it = acts.devAction.begin();it != acts.devAction.end();it++) { ui->comboBox_action->addItem(it.value(), it.key()); } } } /* 获取动作名称 */ QString OneItem::getActionName() { return ui->comboBox_action->currentText(); } /* 获取动作类型 */ int OneItem::getActionNum() { return ui->comboBox_action->currentIndex(); } /* 添加设备 */ void OneItem::addDevice() { auto& mapDev = DeviceContainer.getMapDevice(); ui->comboBox_devName->clear(); for(const auto& it : mapDev) { ui->comboBox_devName->addItem(it.devName); } /* 设置显示第一个设备,并设置可选的动作 */ ui->comboBox_devName->setCurrentIndex(0); addActions(); } /* 获取日期类型 */ bool OneItem::getDateType() { return m_isSpecial; } /* 设置警告 */ void OneItem::setWarningText(QString str, int ms) { ui->label_warnning->setText(str); ui->label_warnning->show(); if(ms > 0) { m_warnTimer.start(ms); } /* 设置红框 */ ui->pBtn_execTime->setProperty("Warn",true); ui->pBtn_execTime->style()->unpolish(ui->pBtn_execTime); ui->pBtn_execTime->style()->polish(ui->pBtn_execTime); ui->pBtn_execDate->setProperty("Warn",true); ui->pBtn_execDate->style()->unpolish(ui->pBtn_execDate); ui->pBtn_execDate->style()->polish(ui->pBtn_execDate); } /* 隐藏警告 */ void OneItem::hideWarn() { ui->label_warnning->clear(); /* 取消红框 */ ui->pBtn_execTime->setProperty("Warn", false); ui->pBtn_execTime->style()->unpolish(ui->pBtn_execTime); ui->pBtn_execTime->style()->polish(ui->pBtn_execTime); ui->pBtn_execDate->setProperty("Warn", false); ui->pBtn_execDate->style()->unpolish(ui->pBtn_execDate); ui->pBtn_execDate->style()->polish(ui->pBtn_execDate); } /* 获取执行时间的位置 */ QPoint OneItem::getExecTimePos() { return ui->pBtn_execTime->pos(); } /* 获取执行日期的位置 */ QPoint OneItem::getExecDatePos() { return ui->pBtn_execDate->pos(); } /* 获取执行时间按钮的大小 */ QSize OneItem::getExecTimeSize() { return ui->pBtn_execTime->size(); } /* 获取执行日期按钮的大小 */ QSize OneItem::getExecDateSize() { return ui->pBtn_execDate->size(); } /* 设置样式表,打开的样式表 */ void OneItem::do_setQSS(const QString& qss) { this->setStyleSheet(qss); } /* 设备改变了 */ void OneItem::do_devChanged(QString devName) { /* 根据选择的设备,设置该设备的动作 */ ui->comboBox_action->clear(); auto it = DeviceContainer.getDevice(devName); if(it.PTTypeCode > 0) { m_devInfo = it; for(auto it1 = m_devInfo.DevType.devAction.begin();it1 != m_devInfo.DevType.devAction.end();it1++) { ui->comboBox_action->addItem(it1.value(), it1.key()); } }else { LH_WRITE_ERROR(QString("没有这个设备:%1").arg(devName)); return; } emit signal_devChanged(); } /* 动作改变了 */ void OneItem::do_actionChanged(QString action) { } /* 执行时间被点击了 */ void OneItem::do_pBtn_execTime_clicked() { emit signal_execTimeClicked(getExecTime()); } /* 执行日期被点击了 */ void OneItem::do_pBtn_execDate_clicked() { emit signal_dateClicked(getDate()); } /* 关闭按钮被点击了 */ void OneItem::do_pBtn_close_clicked() { emit signal_OneItemDelete(m_weekDay, m_num); } /* 根据日期类型布局 */ void OneItem::layoutInit() { /* 正常日,日期隐藏 */ if(!m_isSpecial) { ui->pBtn_execDate->hide(); ui->pBtn_iconDate->hide(); /* 序号 */ ui->label_num->move(18, 0); /* 设备名称 */ ui->comboBox_devName->move(114, 0); /* 执行时间 */ ui->pBtn_execTime->move(390, 0); /* 执行时间图标 */ ui->pBtn_iconTime->move(498, 8); /* 动作 */ ui->comboBox_action->move(538, 0); /* 关闭 */ ui->pBtn_close->move(814, 0); }else { ui->pBtn_execDate->show(); ui->pBtn_iconDate->show(); /* 序号 */ ui->label_num->move(18, 0); /* 设备名称 */ ui->comboBox_devName->move(114, 0); /* 执行日期 */ ui->pBtn_execDate->move(390, 0); /* 执行日期图标 */ ui->pBtn_iconDate->move(498, 8); /* 执行时间 */ ui->pBtn_execTime->move(539, 0); /* 执行时间图标 */ ui->pBtn_iconTime->move(646, 8); /* 动作 */ ui->comboBox_action->move(686, 0); /* 关闭 */ ui->pBtn_close->move(962, 0); } } /* 事件过滤器 */ bool OneItem::eventFilter(QObject *watched, QEvent *event) { if(watched == ui->comboBox_action) { if(event->type() == QEvent::Wheel) { return true; } } else if(watched == ui->comboBox_devName) { if(event->type() == QEvent::Wheel) { return true; } } else if(watched == ui->pBtn_close) { if(event->type() == QEvent::Enter) { ui->pBtn_close->setProperty("Hover", true); ui->pBtn_close->style()->unpolish(ui->pBtn_close); ui->pBtn_close->style()->polish(ui->pBtn_close); return true; }else if(event->type() == QEvent::Leave) { ui->pBtn_close->setProperty("Hover", false); ui->pBtn_close->style()->unpolish(ui->pBtn_close); ui->pBtn_close->style()->polish(ui->pBtn_close); return true; } } return QWidget::eventFilter(watched,event); }