#include "DateVarSet.h" #include "ui_datevarset.h" #include #include #include unsigned char vartypeR = 0x00; //标记需要替换的类型 如:年 月 日 //QMap replaceValueMap; QMap> replaceValueMap; DateVarSet::DateVarSet(QWidget *parent) : QWidget(parent), ui(new Ui::DateVarSet) { ui->setupUi(this); if (sysPara == nullptr) { sysPara = SysPara::ins(); } digitWidth = 4; varTypeSet = 0; varHtmlStr = ""; currPage = 0; QGridLayout* layout = new QGridLayout(); layout->setMargin(0); layout->setContentsMargins(0, 0, 0, 0); m_generalSettings = new ItemGeneralSettings(); layout->addWidget(m_generalSettings); ui->generalTab->setLayout(layout); applyStyleSheet(); init(); initReplaceValue(); } void DateVarSet::init() { // 连接信号槽 connect(ui->checkBtn, &QPushButton::clicked, this, &DateVarSet::buttonClickedSlot); connect(ui->closeBtn,&QPushButton::clicked, this, &DateVarSet::buttonClickedSlot); connect(ui->btnPoint,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnColon,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnComma,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnSlash,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnSemicolon,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnUnderline,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnDash,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnBackSpace,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnHour,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnMinute,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnSecond,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnDay,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnMonth,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnYear4,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnYear2,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnWeekOfYear,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnWeek,&QPushButton::clicked,this,&DateVarSet::buttonClickedSlot); connect(ui->btnSpace, &QPushButton::clicked, this, &DateVarSet::buttonClickedSlot); connect(ui->lineEdit_Replace1, &QLineEdit::textChanged, std::bind(&DateVarSet::onLineEditReplaceChanged, this, 0, std::placeholders::_1)); connect(ui->lineEdit_Replace2, &QLineEdit::textChanged, std::bind(&DateVarSet::onLineEditReplaceChanged, this, 1, std::placeholders::_1)); connect(ui->lineEdit_Replace3, &QLineEdit::textChanged, std::bind(&DateVarSet::onLineEditReplaceChanged, this, 2, std::placeholders::_1)); connect(ui->lineEdit_Replace4, &QLineEdit::textChanged, std::bind(&DateVarSet::onLineEditReplaceChanged, this, 3, std::placeholders::_1)); } void DateVarSet::initUI() { if (m_generalSettings) m_generalSettings->initUI(); ui->lineEdit_DateFormat->setText(""); ui->expirationCBox->setCurrentIndex(0); ui->expirationNumCBox->setValue(0); ui->cb_replaceType->setCurrentIndex(0); } void DateVarSet::initReplaceValue(){ monthList.clear(); for (int i = 1; i <= 12; ++i) { monthList.append(QString("%1").arg(i, 2, 10, QChar('0'))); // 补零格式化 } dataList.clear(); dataList << "0" << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "8" << "9" << "A" << "B" << "C" << "D" << "E" << "F"; weekList.clear(); weekList << "MON" << "TUE" << "WED" << "THU" << "FRI" << "SAT" << "SUN"; yearList.clear(); int startYear = QDate::currentDate().year(); for (int i = 0; i < 16; ++i) { yearList << QString("%1").arg(startYear + i); } yearInitList.clear(); startYear = QDate::currentDate().year(); for(int i=0;i<16;i++){ yearInitList<cb_replaceType->currentIndex() == 2) //index 2 --- 月 loadMonthShow(); else if(ui->cb_replaceType->currentIndex() == 0) //index 0 --- 数据 loadDataShow(); else if(ui->cb_replaceType->currentIndex() == 1) //index 1 --- 周几 loadWeekShow(); else if(ui->cb_replaceType->currentIndex() == 3) //index 3 --- 年份 loadYearShow(); else if(ui->cb_replaceType->currentIndex() == 4) //index 4 --- 天数 loadDayShow(); else if(ui->cb_replaceType->currentIndex() == 5) //index 5 --- 小时 loadHourShow(); // currPage = 0; } void DateVarSet::buttonClickedSlot() { QPushButton* btn = qobject_cast(sender()); if (btn == ui->checkBtn) { emit sendButtonClickedSignal(1); return; }else if(btn == ui->closeBtn) { emit sendButtonClickedSignal(2); return; }else if(btn == ui->btnPoint){ ui->lineEdit_DateFormat->insert("."); }else if(btn == ui->btnColon){ ui->lineEdit_DateFormat->insert(":"); }else if(btn == ui->btnComma){ ui->lineEdit_DateFormat->insert(","); }else if(btn == ui->btnSlash){ ui->lineEdit_DateFormat->insert("/"); }else if(btn == ui->btnSemicolon){ ui->lineEdit_DateFormat->insert(";"); }else if(btn == ui->btnUnderline){ ui->lineEdit_DateFormat->insert("_"); }else if(btn == ui->btnDash){ ui->lineEdit_DateFormat->insert("-"); }else if(btn == ui->btnBackSpace){ ui->lineEdit_DateFormat->setFocus(); emit backSpaceBtn(); }else if(btn == ui->btnHour){ ui->lineEdit_DateFormat->insert("HH"); }else if(btn == ui->btnMinute){ ui->lineEdit_DateFormat->insert("mm"); }else if(btn == ui->btnSecond){ ui->lineEdit_DateFormat->insert("ss"); }else if(btn == ui->btnDay){ ui->lineEdit_DateFormat->insert("dd"); }else if(btn == ui->btnMonth){ ui->lineEdit_DateFormat->insert("MM"); }else if(btn == ui->btnYear4){ ui->lineEdit_DateFormat->insert("yyyy"); }else if(btn == ui->btnYear2){ ui->lineEdit_DateFormat->insert("YY"); } else if(btn == ui->btnWeekOfYear){ ui->lineEdit_DateFormat->insert("c"); } else if(btn == ui->btnWeek){ ui->lineEdit_DateFormat->insert("w"); } else if(btn == ui->btnSpace) ui->lineEdit_DateFormat->insert(" "); } DateVarSet::~DateVarSet() { delete ui; } void DateVarSet::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){ int type = 0,width = 0; if(varType && digitalWidth){ *varType = type; *digitalWidth = width; } } DateItemModel DateVarSet::dateModel() { DateItemModel model; model.datetimePattern = ui->lineEdit_DateFormat->text(); model.dataMap = dataList; model.weeksMap = weekList; model.hoursMap = hourList; model.monthsMap = monthList; model.daysMap = dayList; for(int i = 0; i < yearInitList.size(); ++i) { model.yearsMap[yearInitList[i]] = yearList[i]; } if(ui->expirationCBox->currentIndex() == 0) { model.daysOffset = ui->expirationNumCBox->value(); model.monthsOffset = 0; } else if(ui->expirationCBox->currentIndex() >= 1) { model.monthsOffset = ui->expirationNumCBox->value(); model.daysOffset = 0; } else { model.monthsOffset = 0; model.daysOffset = 0; } return model; } void DateVarSet::setDateModel(const DateItemModel &model) { ui->lineEdit_DateFormat->setText(model.datetimePattern); dataList = model.dataMap; weekList = model.weeksMap; hourList = model.hoursMap; monthList = model.monthsMap; dayList = model.daysMap; yearInitList = model.yearsMap.keys(); yearList = model.yearsMap.values(); if(model.daysOffset != 0) { ui->expirationCBox->setCurrentIndex(0); ui->expirationNumCBox->setValue(model.daysOffset); } else if(model.monthsOffset != 0) { ui->expirationCBox->setCurrentIndex(1); ui->expirationNumCBox->setValue(model.monthsOffset); } else { ui->expirationCBox->setCurrentIndex(0); ui->expirationNumCBox->setValue(0); } loadMonthShow(); ui->tabWidget->setCurrentIndex(1); } QString DateVarSet::getFamilyName(int fontsize){ return "YaHei"+QString::number(fontsize); } TextItemModel DateVarSet::textItemModeL() { return m_generalSettings->viewModel(); } void DateVarSet::setTextItemModel(const TextItemModel &model) { m_generalSettings->setViewModel(model); } void DateVarSet::applyStyleSheet() { QString styleSheet = R"( QPushButton#closeBtn, QPushButton#checkBtn{ background-color: #E6F7FF; border: 1px solid #87CEEB; border-radius: 4px; font-size: 24px; color: #228B22; } QPushButton#closeBtn:hover,QPushButton#checkBtn:hover{ background-color: #D1E9FF; } QPushButton#closeBtn:pressed,QPushButton#checkBtn:pressed{ background-color: #BAE7FF; } QPushButton { background-color: #5396C1; color: #ffffff; border: 1px solid #000000; border-radius: 3px; font-size: 18px; font-weight:500; width: 180px; height: 90px; } QPushButton:hover { background-color: #5396C1; } QPushButton:disabled { background-color: #7C828E; color: #606060; border-color: #808080; } QComboBox { border: 1px solid #000000; border-radius: 3px; font-size: 14px; width: 180px; height: 90px; padding-left: 10px; /* 文字左边距,避免紧贴边缘 */ } /* 下拉箭头区域 */ QComboBox::drop-down { border: 1px solid #333333; border-radius: 3px; width: 30px; /* 箭头区域宽度 */ background-color: #5396C1; } /* 下拉箭头图标 */ QComboBox::down-arrow { image: url(:/image/down_white.png); width: 16px; /* 图标显示宽度 */ height: 16px; /* 图标显示高度 */ } /* 悬停状态 */ QComboBox:hover { background-color: #efefef; } QComboBox QAbstractItemView { border: 1px solid #000000; border-radius: 3px; font-size: 14px; selection-background-color: #5396C1; /* 选中项背景色(稍深) */ selection-color: #ffffff; } QTabWidget { border: none; background-color: #7B838E; } QTabBar::tab { min-width: 90px; min-height: 45px; padding: 4px 10px; margin-right: 4px; border: 1px solid #dddddd; border-bottom: none; border-top-left-radius: 4px; border-top-right-radius: 4px; background-color: #5396C1; color: #ffffff; } QTabWidget::tab-bar { top: -3px; left: 10px; } QTabBar::tab:selected { background-color: #6bb1e0; color: #ffffff; box-shadow: 0 -3px 8px rgba(44, 125, 232, 0.25); } )"; this->setStyleSheet(styleSheet); } void DateVarSet::on_CBDateFormat1_currentIndexChanged(int index) { // sysPara->para.ExpirySplitMode = ui->CBDateFormat1->currentIndex(); sysPara->para.ExpirySplitMode = 0; } void DateVarSet::on_cb_replaceType_currentIndexChanged(int index) { if(index == 0){ loadDataShow(); }else if(index == 1){ loadWeekShow(); }else if(index == 2){ loadMonthShow(); }else if(index == 3){ loadYearShow(); }else if(index == 4){ loadDayShow(); }else if(index == 5){ loadHourShow(); } } void DateVarSet::loadMonthShow(){ if(currPage > 2) //最大显示3页 currPage = 2; int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject); if(lineEdit) lineEdit->setText(QString::number(i+1)); QString strObject2 = QString("lineEdit_Replace") + QString::number(objectIndex); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(monthList.at(i)); lineEdit2->blockSignals(b); } objectIndex++; } } void DateVarSet::loadDataShow(){ if(currPage >3) //最大显示4页 currPage =3; int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject); if(lineEdit) lineEdit->setText(QString::number(i)); QString strObject2 = QString("lineEdit_Replace") + QString::number(objectIndex); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(dataList.at(i)); lineEdit2->blockSignals(b); } objectIndex++; } } void DateVarSet::loadWeekShow(){ initShowLineEdit(); if(currPage >1) //最大显示4页 currPage =1; int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject); if(lineEdit) lineEdit->setText(QString::number(i+1)); QString strObject2 = QString("lineEdit_Replace") + QString::number(objectIndex); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(weekList.at(i)); lineEdit2->blockSignals(b); } objectIndex++; } } void DateVarSet::loadYearShow(){ if(currPage >3) //最大显示4页 currPage =3; int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject); if(lineEdit && isetText(QString::number(yearInitList.at(i))); } QString strObject2 = QString("lineEdit_Replace") + QString::number(objectIndex); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(yearList.at(i)); lineEdit2->blockSignals(b); } objectIndex++; } } void DateVarSet::loadDayShow(){ initShowLineEdit(); if(currPage > 7) //最大显示8页 currPage = 7; int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject); if(lineEdit) lineEdit->setText(QString::number(i+1)); QString strObject2 = QString("lineEdit_Replace") + QString::number(objectIndex); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(dayList.at(i)); lineEdit2->blockSignals(false); } objectIndex++; } } void DateVarSet::loadHourShow(){ if(currPage > 5) //最大显示6页 currPage = 5; int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject); if(lineEdit) lineEdit->setText(QString::number(i)); QString strObject2 = QString("lineEdit_Replace") + QString::number(objectIndex); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(hourList.at(i)); lineEdit2->blockSignals(b); } objectIndex++; } } void DateVarSet::getMonthValue(){ int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject2); if(lineEdit2) monthList[i] = lineEdit2->text(); objectIndex++; } } void DateVarSet::getYearValue(){ int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject2); if(lineEdit2) yearList[i] = lineEdit2->text(); objectIndex++; } // for (int i = 0; i < yearList.size(); ++i) { // qDebug()<<"i:"<findChild(strObject2); if(lineEdit2) dayList[i] = lineEdit2->text(); objectIndex++; } } void DateVarSet::getHourValue(){ int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject2); if(lineEdit2) hourList[i] = lineEdit2->text(); objectIndex++; } } void DateVarSet::getWeekValue(){ int objectIndex = 1; for(int i=currPage*4;(i<(currPage+1)*4)&&(ifindChild(strObject2); if(lineEdit2) weekList[i] = lineEdit2->text(); objectIndex++; } } void DateVarSet::on_btnUP_clicked() { if(currPage<1) return; currPage = currPage-1; if(ui->cb_replaceType->currentIndex() == 2){ loadMonthShow(); }else if(ui->cb_replaceType->currentIndex() == 0){ loadDataShow(); }else if(ui->cb_replaceType->currentIndex() == 1){ loadWeekShow(); }else if(ui->cb_replaceType->currentIndex() == 3){ loadYearShow(); }else if(ui->cb_replaceType->currentIndex() == 4){ loadDayShow(); }else if(ui->cb_replaceType->currentIndex() == 5){ loadHourShow(); } } void DateVarSet::on_btnDown_clicked() { initShowLineEdit(); int currentIndex = ui->cb_replaceType->currentIndex(); if (currentIndex == 2) { // Month if (currPage < 2) { currPage++; } loadMonthShow(); return; } if (currentIndex == 0) { // Data if (currPage < 3) { currPage++; } loadDataShow(); return; } if(currentIndex == 1){ if(currPage<1){ currPage++; } loadWeekShow(); return; } if(currentIndex == 3){ if(currPage<3){ currPage++; } loadYearShow(); return; } if(currentIndex == 4){ if(currPage<7){ currPage++; } loadDayShow(); return; } if(currentIndex == 5){ if(currPage < 5){ currPage++; } loadHourShow(); return; } } void DateVarSet::initShowLineEdit(){ for(int i=1;i<=4;i++){ QString strObject = QString("lineEditName") + QString::number(i); QLineEdit *lineEdit = this->findChild(strObject); if(lineEdit) lineEdit->setText(""); QString strObject2 = QString("lineEdit_Replace") + QString::number(i); QLineEdit *lineEdit2 = this->findChild(strObject2); if(lineEdit2) { auto b = lineEdit2->blockSignals(true); lineEdit2->setText(""); lineEdit2->blockSignals(b); } } } void DateVarSet::on_btnPreSetValue_clicked() { if(ui->cb_replaceType->currentIndex() == 2){ //index 2 --- 替代月份 getMonthValue(); vartypeR = vartypeR | 1<<2; QMap monthMap; for(int i=0;icb_replaceType->currentIndex() == 3){ //index 3 --- 替代年份 getYearValue(); vartypeR = vartypeR | 1<<3; QMap yearMap; for(int i=0;icb_replaceType->currentIndex() == 4){ //index 4 --- 替代天数 getDayValue(); vartypeR = vartypeR | 1<<4; QMap dayMap; for(int i=0;icb_replaceType->currentIndex() == 5){ //index 5 --- 替代小时 getHourValue(); vartypeR = vartypeR | 1<<5; QMap hourMap; for(int i=0;icb_replaceType->currentIndex() == 1){ getWeekValue(); vartypeR = vartypeR | 1<<1; QMap weekMap; for(int i=0;icb_digits->clear(); // if (ui->radioButtonCurDate->isChecked() || ui->radioButtonExpiry->isChecked()) { // for (int i = 1; i <= 15; i++) { // ui->cb_digits->addItem(QString::number(i)); // } // } // else { // for (int j = 1; j <= 8; j++) { // ui->cb_digits->addItem(QString::number(j)); // } // } } void DateVarSet::onLineEditReplaceChanged(int i, QString txt) { auto mapIdx = currPage * 4 + i; switch(ui->cb_replaceType->currentIndex()) { case 0: dataList[mapIdx] = txt; break; case 1: weekList[mapIdx] = txt; break; case 2: monthList[mapIdx] = txt; break; case 3: yearList[mapIdx] = txt; break; case 4: dayList[mapIdx] = txt; break; case 5: hourList[mapIdx] = txt; break; case 6: default: break; } }