#include "CounterVarSet.h" #include "ui_countervarset.h" #include #include #include "scene/PicCounterItem.h" #include CounterVarSet::CounterVarSet(QWidget *parent) : QWidget(parent), ui(new Ui::CounterVarSet) { ui->setupUi(this); init(); } CounterVarSet::~CounterVarSet() { delete ui; } void CounterVarSet::init() { applyStyleSheet(); // 连接信号槽 connect(ui->checkBtn, &QPushButton::clicked, this, &CounterVarSet::buttonClickedSlot); connect(ui->closeBtn, &QPushButton::clicked, this, &CounterVarSet::buttonClickedSlot); connect(ui->tabWidget, &QTabWidget::currentChanged, this, [this](int i){ if(ui->cb_digits->currentIndex() == -1) { return; } QSpinBox *endValueBox = nullptr; if(ui->tabWidget->widget(i) == ui->cnt1Tab && ui->radioButtonVar1->isChecked()) { endValueBox = ui->spinBoxCnt1EndValue; } else if(ui->tabWidget->widget(i) == ui->cnt2Tab && ui->radioButtonVar2->isChecked()) { endValueBox = ui->spinBoxCnt2EndValue; } if(!endValueBox) { return; } int digits = ui->cb_digits->itemText(ui->cb_digits->currentIndex()).toInt(); int maxValue = qPow(10, digits) - 1; endValueBox->setMaximum(maxValue); endValueBox->setValue(maxValue); }); } void CounterVarSet::buttonClickedSlot() { // 添加 QPushButton* btn = qobject_cast(sender()); if (btn == ui->checkBtn) { // on_buttonInsertVari_pressed(); emit sendButtonClickedSignal(1); }else if(btn == ui->closeBtn){ emit sendButtonClickedSignal(2); } } CounterViewModel CounterVarSet::getCounterConfig() { CounterViewModel& viewModel = m_vm; unsigned char splitMode = 0; getValue(&viewModel.counterType, &viewModel.digitalNum, &splitMode); viewModel.letterSpace = ui->letterSpaceSpinBox->value(); applyUIPara(); return viewModel; } void CounterVarSet::onDigitsChanged(int digits) { int maxValue = qPow(10, digits) - 1; QSpinBox* endValueBox = nullptr; if(ui->radioButtonVar1->isChecked()) endValueBox = ui->spinBoxCnt1EndValue; else endValueBox = ui->spinBoxCnt2EndValue; endValueBox->setMaximum(maxValue); endValueBox->setValue(maxValue); } void CounterVarSet::setCounterConfig(CounterViewModel viewModel, bool isChange) { m_vm = viewModel; ui->cb_digits->setCurrentText(QString::number(viewModel.digitalNum)); ui->radioButtonVar1->setChecked(viewModel.counterType == COUNTER_TYPE_1 ? true : false); ui->radioButtonVar2->setChecked(viewModel.counterType == COUNTER_TYPE_2 ? true : false); ui->tabWidget->setCurrentIndex(viewModel.counterType == COUNTER_TYPE_1 ? 1 : 2); ui->letterSpaceSpinBox->setValue(viewModel.letterSpace); updateSysParaToUI(isChange); } void CounterVarSet::getValue(int *varType,int *digitalWidth,unsigned char *splitMode){ int type = 0,width = 0; // 20260403 if(ui->radioButtonVar1->isChecked()) type = 7; else if(ui->radioButtonVar2->isChecked()) type = 8; width = ui->cb_digits->currentText().toInt(); if(varType && digitalWidth){ *varType = type; *digitalWidth = width; } return; } void CounterVarSet::applyUIPara() { m_vm.cnt1Settings.endValue = ui->spinBoxCnt1EndValue->value(); m_vm.cnt1Settings.repeatValue = ui->spinBoxCnt1RepeateCnt->value(); m_vm.cnt1Settings.startValue = ui->spinBoxCnt1StartValue->value(); m_vm.cnt1Settings.stepValue = ui->spinBoxCnt1StepValue->value(); m_vm.cnt1Settings.currValue = ui->spinBoxCnt1CurrValue->value(); m_vm.cnt2Settings.endValue = ui->spinBoxCnt2EndValue->value(); m_vm.cnt2Settings.repeatValue = ui->spinBoxCnt2RepeateCnt->value(); m_vm.cnt2Settings.startValue = ui->spinBoxCnt2StartValue->value(); m_vm.cnt2Settings.stepValue = ui->spinBoxCnt2StepValue->value(); m_vm.cnt2Settings.currValue = ui->spinBoxCnt2CurrValue->value(); } void CounterVarSet::updateSysParaToUI(bool isChange) { handleChange(isChange); ui->spinBoxCnt1EndValue->setValue(m_vm.cnt1Settings.endValue); ui->spinBoxCnt1RepeateCnt->setValue(m_vm.cnt1Settings.repeatValue); ui->spinBoxCnt1StartValue->setValue(m_vm.cnt1Settings.startValue); ui->spinBoxCnt1StepValue->setValue(m_vm.cnt1Settings.stepValue); ui->spinBoxCnt1CurrValue->setValue(m_vm.cnt1Settings.currValue); ui->spinBoxCnt2EndValue->setValue(m_vm.cnt2Settings.endValue); ui->spinBoxCnt2RepeateCnt->setValue(m_vm.cnt2Settings.repeatValue); ui->spinBoxCnt2StartValue->setValue(m_vm.cnt2Settings.startValue); ui->spinBoxCnt2StepValue->setValue(m_vm.cnt2Settings.stepValue); ui->spinBoxCnt2CurrValue->setValue(m_vm.cnt2Settings.currValue); } void CounterVarSet::handleChange(bool isChange) { if (isChange) { const bool useCnt1 = ui->radioButtonVar1->isChecked(); if (useCnt1) { // 只显示 cnt1Tab if (ui->tabWidget->indexOf(ui->cnt2Tab) >= 0) ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->cnt2Tab)); if (ui->tabWidget->indexOf(ui->cnt1Tab) < 0) ui->tabWidget->insertTab(1, ui->cnt1Tab, tr("计数器1")); ui->tabWidget->setCurrentWidget(ui->cnt1Tab); } else { // 只显示 cnt2Tab if (ui->tabWidget->indexOf(ui->cnt1Tab) >= 0) ui->tabWidget->removeTab(ui->tabWidget->indexOf(ui->cnt1Tab)); if (ui->tabWidget->indexOf(ui->cnt2Tab) < 0) ui->tabWidget->insertTab(1, ui->cnt2Tab, tr("计数器2")); ui->tabWidget->setCurrentWidget(ui->cnt2Tab); } } else { // 两个都显示 if (ui->tabWidget->indexOf(ui->cnt1Tab) < 0) ui->tabWidget->insertTab(1, ui->cnt1Tab, tr("计数器1")); if (ui->tabWidget->indexOf(ui->cnt2Tab) < 0) ui->tabWidget->insertTab(2, ui->cnt2Tab, tr("计数器2")); } } void CounterVarSet::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; } QSpinBox::down-button { width: 23px; /* 图标显示宽度 */ height: 23px; /* 图标显示高度 */ border: 1px solid #333333; border-radius: 3px; background-color: #5396C1; } QSpinBox::down-arrow { image: url(:/image/down_white.png); height: 18px; width: 18px; } QSpinBox::up-button { width: 23px; /* 图标显示宽度 */ height: 23px; /* 图标显示高度 */ border: 1px solid #333333; border-radius: 3px; background-color: #5396C1; } QSpinBox::up-arrow { image: url(:/image/up_white.png); height: 18px; width: 18px; } QSpinBox { border: 1px solid #333333; } QTabWidget { border: none; background-color: #7B838E; } QTabBar::tab { margin-top: -3px; 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:focus { outline: none; } QTabBar::tab:selected { background-color: #6bb1e0; color: #ffffff; box-shadow: 0 -3px 8px rgba(44, 125, 232, 0.25); } QRadioButton::indicator { width: 25px; height: 25px; } QSpinBox::down-button { width: 23px; /* 图标显示宽度 */ height: 23px; /* 图标显示高度 */ border: 1px solid #333333; border-radius: 3px; background-color: #5396C1; } QSpinBox::down-arrow { image: url(:/image/down_white.png); height: 15px; width: 15px; } QSpinBox::up-button { width: 23px; /* 图标显示宽度 */ height: 23px; /* 图标显示高度 */ border: 1px solid #333333; border-radius: 3px; background-color: #5396C1; } QSpinBox::up-arrow { image: url(:/image/up_white.png); height: 15px; width: 15px; } QSpinBox { border: 1px solid #333333; } QCheckBox { color: #000000; } QCheckBox::indicator { width: 15px; height: 15px; border: 1px solid #96A0A9; border-radius: 8px; background-color: #ffffff; } QCheckBox::indicator:checked { background-color: #95B2D4; border-color: #95B2D4; } )"; this->setStyleSheet(styleSheet); }