Files

395 lines
12 KiB
C++

#include "CounterVarSet.h"
#include "ui_countervarset.h"
#include <QDateTime>
#include <QDebug>
#include "scene/PicCounterItem.h"
#include <qmath.h>
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<QPushButton*>(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);
ui->radioButtonVar1->setEnabled(true);
ui->radioButtonVar2->setEnabled(false);
} 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);
ui->radioButtonVar1->setEnabled(false);
ui->radioButtonVar2->setEnabled(true);
}
} 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"));
ui->radioButtonVar1->setEnabled(true);
ui->radioButtonVar2->setEnabled(true);
}
}
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);
}