Files
GUI/src/components/DateSlidePickerBox.cpp

153 lines
4.6 KiB
C++

//
// Created by Krad on 2022/3/24.
//
#include "DateSlidePickerBox.h"
#include <QHBoxLayout>
#include <QLabel>
#include <QDate>
DateSlidePickerBox::DateSlidePickerBox(QWidget *parent) {
layout = new QHBoxLayout(this);
myear = new SlidePickerBox(this);
QStringList centry;
centry<<"19"<<"20";
myear->setFixedWidth(56);
myear->setItems(centry);
layout->addWidget(myear);
tyear = new SlidePickerBox(this);
QStringList m_centry;
m_centry << "0" << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "8" << "9";
tyear->setItems(m_centry);
tyear->setFixedWidth(50);
layout->addWidget(tyear);
year = new SlidePickerBox(this);
year->setItems(m_centry);
year->setFixedWidth(50);
layout->addWidget(year);
QLabel* label = new QLabel(this);
label->setText("/");
// label->setFixedHeight(110);
label->setAlignment(Qt::AlignCenter);
label->setFixedWidth(50);
label->setObjectName("sliderSpliterLabel");
layout->addWidget(label);
month = new SlidePickerBox(this);
QStringList m_mouth;
m_mouth << "01" << "02" << "03" << "04" << "05" << "06" << "07" << "08" << "09"<<"10"<<"11"<<"12";
month->setItems(m_mouth);
month->setFixedWidth(56);
layout->addWidget(month);
QLabel* label2 = new QLabel(this);
label2->setText("/");
// label2->setFixedHeight(110);
label2->setAlignment(Qt::AlignCenter);
// label2->setFixedHeight(80);
label2->setFixedWidth(50);
label2->setObjectName("sliderSpliterLabel");
layout->addWidget(label2);
day = new SlidePickerBox(this);
QStringList days;
days << "01" << "02" << "03" << "04" << "05" << "06" << "07" << "08" << "09";
for (int i=10;i<=31;i++){
days<<QString("%1").arg(i);
}
day->setFixedWidth(56);
day->setItems(days);
layout->addWidget(day);
bigMonth << "01" << "03" << "05" << "07" << "08" << "10" << "12";
connect(myear,&SlidePickerBox::valueChanged,this,&DateSlidePickerBox::leapYearAndFebruaryAdjust);
connect(tyear,&SlidePickerBox::valueChanged,this,&DateSlidePickerBox::leapYearAndFebruaryAdjust);
connect(year,&SlidePickerBox::valueChanged,this,&DateSlidePickerBox::leapYearAndFebruaryAdjust);
connect(month,&SlidePickerBox::valueChanged,this,&DateSlidePickerBox::leapYearAndFebruaryAdjust);
}
void DateSlidePickerBox::resizeLabel() {
myear->resizeLabelWidth();
tyear->resizeLabelWidth();
year->resizeLabelWidth();
month->resizeLabelWidth();
day->resizeLabelWidth();
}
QString DateSlidePickerBox::getSelectedValue() {
return QString("%1%2%3-%4-%5").arg(myear->getSelectedValue()).
arg(tyear->getSelectedValue()).arg(year->getSelectedValue())
.arg(month->getSelectedValue()).arg(day->getSelectedValue());
}
void DateSlidePickerBox::setSelectedValue(const QString &val) {
myear->setSelectedValue(val.left(2));
tyear->setSelectedValue(val.left(3).right(1));
year->setSelectedValue(val.left(4).right(1));
QStringList sary = val.split('-');
month->setSelectedValue(sary[1]);
day->setSelectedValue(sary[2]);
}
int DateSlidePickerBox::getYear() {
return QString("%1%2%3").arg(myear->getSelectedValue()).
arg(tyear->getSelectedValue()).arg(year->getSelectedValue()).toInt();
}
void DateSlidePickerBox::leapYearAndFebruaryAdjust() {
QString d = day->getSelectedValue();
//闰年且二月
if (QDate::isLeapYear(getYear()) && month->getSelectedValue() == "02") {
//seq is important, must enable item firstly
day->enableItem("29");
if (d.toInt() > 29) {
day->setSelectedValue("29");
}
day->disableItem("30");
day->disableItem("31");
}
//普通年份2月或其他月份
else{
//普通年份2月
if (month->getSelectedValue() == "02") {
//seq is important, must set selected value firstly
if (d.toInt() > 28) {
day->setSelectedValue("28");
}
day->disableItem("29");
day->disableItem("30");
day->disableItem("31");
}
//其他月份
else{
day->enableItem("29");
day->enableItem("30");
if (isBigMonth()){
day->enableItem("31");
}
else{
//seq is important, must set selected value firstly
if (d == "31") {
day->setSelectedValue("30");
}
day->disableItem("31");
}
}
}
// day->setSelectedValue(d);
}
bool DateSlidePickerBox::isBigMonth() {
return bigMonth.contains(month->getSelectedValue());
}