#include "importtemplate.h" #include "ui_importtemplate.h" #include #include #include #include #include #include #include "warning/warning.h" #include "LHQLogAPI.h" #include "OneShadowEffect.h" #include "TransmitterSwitchInfo.h" #include "UIStyleManager.h" #include "template.h" ImportTemplate::ImportTemplate(QWidget *parent) : QDialog(parent), ui(new Ui::ImportTemplate) { ui->setupUi(this); /* 设置隐藏边框 */ this->setWindowFlags(Qt::Dialog | Qt::FramelessWindowHint); /* 设置底层样式表 */ this->setAttribute(Qt::WA_TranslucentBackground); /* 创建阴影 */ QSize size = this->size(); size.setWidth(size.width() - 40); size.setHeight(size.height() - 40); auto pShadow = new OneShadowEffect(this); this->setGraphicsEffect(pShadow); m_templateName.clear(); /* 设置列数 */ ui->tableWidget->horizontalHeader()->setVisible(true); ui->tableWidget->setColumnCount(3); /* 设置列表头 */ QStringList headerList; headerList << "频率名称" << "模版名称" << "选择"; ui->tableWidget->setHorizontalHeaderLabels(headerList); ui->tableWidget->horizontalHeader()->setSectionsClickable(false); ui->tableWidget->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft | Qt::AlignVCenter); /* 设置列表头高度 */ ui->tableWidget->horizontalHeader()->setDefaultSectionSize(40); /* 设置列宽间距,在显示事件中设置 */ /* 设置列宽度固定 */ ui->tableWidget->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Fixed); ui->tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Fixed); ui->tableWidget->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed); //设置行高 ui->tableWidget->verticalHeader()->setDefaultSectionSize(40); //设置不可编辑 ui->tableWidget->setEditTriggers(QTableWidget::NoEditTriggers); //设置选中一行 ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //设置只能选中一行 ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); //隐藏横滚动条 ui->tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); //隐藏网格线 ui->tableWidget->setShowGrid(false); //隐藏行号 ui->tableWidget->verticalHeader()->setVisible(false); //设置不显示选中后的虚线 ui->tableWidget->setFocusPolicy(Qt::NoFocus); //开启排序功能 // ui->tableWidget->setSortingEnabled(true); 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())); /* 注册事件过滤器 */ ui->pBtn_close->installEventFilter(this); } ImportTemplate::~ImportTemplate() { delete ui; } void ImportTemplate::do_ok() { /* 获取已选中的模版列表 */ for(auto it : m_listCheckBox) { if(it->isChecked()) { auto chnID = it->property(m_propertyChnID.c_str()).toInt(); auto tmpName = it->property(m_propertytmpName.c_str()).toString(); OneTemplateInfo info; info.channelInfo.ChannelID = chnID; info.templateName = tmpName; m_listTemplate.append(info); } } m_isOk = true; emit signal_templateName(m_templateName); this->close(); } /* 点击了一个checkBox,取消其他同频率的checkBox */ void ImportTemplate::do_checkBox_stateChanged(int state) { if(state != Qt::Checked) { return; } auto checkBox = qobject_cast(sender()); if(checkBox == nullptr) { return; } auto chnID = checkBox->property(m_propertyChnID.c_str()).toInt(); /* 取消其他同频率的checkBox */ for(auto it : m_listCheckBox) { if(it != checkBox && it->property(m_propertyChnID.c_str()).toInt() == chnID) { it->setChecked(false); } } } /* 显示事件 */ void ImportTemplate::showEvent(QShowEvent *event) { /* 设置列宽度 */ int width = (ui->tableWidget->width() - 88 - 16) / 2; ui->tableWidget->setColumnWidth(0, width); ui->tableWidget->setColumnWidth(1, width); ui->tableWidget->setColumnWidth(2, 88); } /* 设置模版列表 */ void ImportTemplate::setTemplateList(const QMultiMap& mapTemplate) { for(auto it = mapTemplate.begin(), end = mapTemplate.end(); it != end; it++) { createRow(it.value()); } } /* 获取选中的模板列表 */ QList& ImportTemplate::getSelectedTemplateList() { return m_listTemplate; } /* 设置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)); } // if(EPUIStyle.getUIStyle() == enum_UIStyle::UI_Dark) // { // /* 手动设置表头的qss */ // ui->tableWidget->horizontalHeader()->setStyleSheet(m_qssHeaderView_dark); // }else { // ui->tableWidget->horizontalHeader()->setStyleSheet(m_qssHeaderView_dark); // } } /* 添加一行 */ void ImportTemplate::createRow(const OneTemplateInfo& info) { /* 设置表格的行数 */ int row = ui->tableWidget->rowCount(); ui->tableWidget->setRowCount(row + 1); /* 设置行高 */ ui->tableWidget->setRowHeight(row, 40); QTableWidgetItem* item0 = new QTableWidgetItem(info.channelInfo.ChannelName); // item->setData(Qt::DisplayRole, info.channelInfo.ChannelName); QTableWidgetItem* item1 = new QTableWidgetItem(info.templateName); ui->tableWidget->setItem(row, 0, item0); ui->tableWidget->setItem(row, 1, item1); auto checkBox = new QCheckBox(); checkBox->setProperty(m_propertyChnID.c_str(), info.channelInfo.ChannelID); checkBox->setProperty(m_propertytmpName.c_str(), info.templateName); /* 连接信号和槽 */ connect(checkBox, &QCheckBox::stateChanged, this, &ImportTemplate::do_checkBox_stateChanged); ui->tableWidget->setCellWidget(row, 2, checkBox); m_listCheckBox.append(checkBox); } /* 事件过滤器 */ 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(); }