#include "importtemplate.h" #include "ui_importtemplate.h" #include #include #include #include #include #include #include "warning/warning.h" // #include "lhstylemanager.h" #include "LHQLogAPI.h" #include "OneShadowEffect.h" #include "TransmitterSwitchInfo.h" ImportTemplate::ImportTemplate(QMap tabList, int type, QWidget *parent) : QDialog(parent), ui(new Ui::ImportTemplate) { ui->setupUi(this); /* 设置隐藏边框 */ this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); /* 设置底层样式表 */ this->setAttribute(Qt::WA_TranslucentBackground); /* 加载QSS文件 */ // QFile file(":/QSS/QSS/importtemplate_light.qss"); // if(file.open(QFile::ReadOnly)) // { // QString styleSheet = file.readAll(); // this->setStyleSheet(styleSheet); // file.close(); // } /* 创建阴影 */ QSize size = this->size(); size.setWidth(size.width() - 32); size.setHeight(size.height() - 32); // m_shadow = new OneShadow(size, 16); auto pShadow = new OneShadowEffect(this); this->setGraphicsEffect(pShadow); m_templateName.clear(); /* 设置列数,列宽、列高、不可编辑、选择一行 */ ui->tableWidget->setColumnCount(3); //设置行高 ui->tableWidget->verticalHeader()->setDefaultSectionSize(48); /* 设置最小列宽 */ ui->tableWidget->horizontalHeader()->setMinimumSectionSize(10); /* 设置列宽间距 */ ui->tableWidget->setColumnWidth(0,46); ui->tableWidget->setColumnWidth(1,272); ui->tableWidget->setColumnWidth(2,60); //设置不可编辑 ui->tableWidget->setEditTriggers(QTableWidget::NoEditTriggers); //设置选中一行 ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置只能选中一行 ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); //隐藏竖滚动条 ui->tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏横滚动条 ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏网格线 ui->tableWidget->setShowGrid(false); //隐藏行号 ui->tableWidget->verticalHeader()->setVisible(false); //隐藏列表头 ui->tableWidget->horizontalHeader()->setVisible(false); //设置不显示选中后的虚线 ui->tableWidget->setFocusPolicy(Qt::NoFocus); //开启排序功能 // ui->tableWidget->setSortingEnabled(true); ui->label_warning->hide(); connect(ui->pBtn_close,SIGNAL(clicked()),this,SLOT(close())); connect(ui->pBtn_cancel,SIGNAL(clicked()),this,SLOT(close())); connect(ui->pBtn_ok,SIGNAL(clicked()),this,SLOT(do_ok())); connect(ui->tableWidget,SIGNAL(cellClicked(int,int)),this,SLOT(do_seletctRow(int,int))); m_type = type; /* 取出当前可用的模版,主要是区分正常日和特殊日 */ QStringList list; for(auto begin = tabList.begin(); begin != tabList.end(); begin++) { LH_WRITE_LOG_DEBUG(QString("模版名称:%1, 类型:%2").arg(begin.key()).arg(begin.value())); if(begin.value() != m_type) { continue; } list.append(begin.key()); } /* 先设置表格的行数 */ ui->tableWidget->setRowCount(list.count()); for(int i = 0;i < list.count();i++) { createRow(i, i + 1, list.at(i)); } /* 注册事件过滤器 */ ui->pBtn_close->installEventFilter(this); } ImportTemplate::~ImportTemplate() { delete ui; } void ImportTemplate::do_ok() { ui->label_warning->hide(); if(m_templateName.isEmpty()) { ui->label_warning->setText("请选择模版"); ui->label_warning->show(); return; } m_isOk = true; emit signal_templateName(m_templateName); this->close(); } /* 选中一行 */ void ImportTemplate::do_seletctRow(int row, int col) { if(col == 2) { /* 弹出框提示确定要删除 */ std::shared_ptr w = std::make_shared(this); w->setQSS(EPConfig.getQSSPath()); w->setText("是否删除模板?"); bool flag = false; connect(w.get(), &Warning::signal_ok,this,[&](){ flag = true; }); w->exec(); if(!flag) { return; } emit signal_deleteTemplate(ui->tableWidget->item(row,1)->text()); /* 删除一行 */ ui->tableWidget->removeRow(row); // LH_WRITE_LOG_DEBUG(QString("剩余模版个数:%1").arg(ui->tableWidget->rowCount())); /* 对模版重新编号 */ for(int i = 0 ;i < ui->tableWidget->rowCount();i++) { ui->tableWidget->item(i,0)->setData(Qt::DisplayRole, i+1); } /* 强制重新绘制表格 */ ui->tableWidget->repaint(); }else { m_templateName = ui->tableWidget->item(row,1)->text(); } } /* 创建一行数据 */ void ImportTemplate::createRow(int row,int num,const QString &text) { /* 获取亮色还是暗色 */ bool isDark = (EPConfig.getUIStyle() == enum_UIStyle::UI_Dark ? true : false); QTableWidgetItem* item = new QTableWidgetItem; item->setData(Qt::DisplayRole,num); ui->tableWidget->setItem(row,0,item); item = new QTableWidgetItem(text); ui->tableWidget->setItem(row,1,item); item = new QTableWidgetItem("删除"); // item->setTextAlignment(Qt::AlignVCenter | Qt::AlignHCenter); if(isDark) { item->setForeground(QColor(95, 158, 255)); }else { item->setForeground(Qt::blue); } ui->tableWidget->setItem(row,2,item); } /* 设置QSS */ void ImportTemplate::setQSSPath(const QString& qssPath) { if(qssPath.isEmpty()) { return; } QString qssFile = qssPath + "/importtemplate.qss"; QFile file(qssFile); if(file.open(QFile::ReadOnly)) { QString styleSheet = file.readAll(); this->setStyleSheet(styleSheet); file.close(); }else { LH_WRITE_ERROR(QString("Open %1 failed").arg(qssFile)); } } /* 绘画事件 */ // void ImportTemplate::paintEvent(QPaintEvent *event) // { // QPainter painter(this); // painter.setRenderHint(QPainter::Antialiasing); // painter.drawImage(QPoint(0, 0), m_shadow->image()); // } /* 事件过滤器 */ bool ImportTemplate::eventFilter(QObject *watched, QEvent *event) { 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); } /* 鼠标点击事件 */ void ImportTemplate::mousePressEvent(QMouseEvent *event) { m_lastPos = event->globalPos(); event->accept(); } /* 鼠标移动事件 */ void ImportTemplate::mouseMoveEvent(QMouseEvent *event) { // QRect rect = this->geometry(); // rect.setBottom(rect.top()+50); auto point = ui->widget_Top->mapToGlobal(QPoint(0, 0)); QRect rect(point, ui->widget_Top->size()); if(!rect.contains(m_lastPos)) { event->accept(); return; } int dx = event->globalX() - m_lastPos.x(); int dy = event->globalY() - m_lastPos.y(); move(x()+dx, y()+dy); m_lastPos = event->globalPos(); event->accept(); } /* 鼠标释放事件 */ void ImportTemplate::mouseReleaseEvent(QMouseEvent *event) { event->accept(); }