Refactor DateSlidePickerBox.
This commit is contained in:
@@ -6,147 +6,123 @@
|
|||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
DateSlidePickerBox::DateSlidePickerBox(QWidget *parent):QWidget(parent) {
|
DateSlidePickerBox::DateSlidePickerBox(QWidget *parent)
|
||||||
layout = new QHBoxLayout(this);
|
: QWidget(parent)
|
||||||
myear = new SlidePickerBox(this);
|
, mLayout(new QHBoxLayout(this))
|
||||||
QStringList centry;
|
, mHundredYearBox(new SlidePickerBox(this))
|
||||||
centry<<"19"<<"20";
|
, mTenYearBox(new SlidePickerBox(this))
|
||||||
myear->setFixedWidth(56);
|
, mYearBox(new SlidePickerBox(this))
|
||||||
myear->setItems(centry);
|
, mMonthBox(new SlidePickerBox(this))
|
||||||
layout->addWidget(myear);
|
, mDayBox(new SlidePickerBox(this)) {
|
||||||
|
initBox(mHundredYearBox, {"19", "20"}, 56);
|
||||||
|
|
||||||
tyear = new SlidePickerBox(this);
|
QStringList tenYearValues{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
|
||||||
QStringList m_centry;
|
initBox(mTenYearBox, tenYearValues);
|
||||||
m_centry << "0" << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "8" << "9";
|
initBox(mYearBox, tenYearValues);
|
||||||
tyear->setItems(m_centry);
|
|
||||||
tyear->setFixedWidth(50);
|
|
||||||
layout->addWidget(tyear);
|
|
||||||
|
|
||||||
year = new SlidePickerBox(this);
|
addSplitLabel();
|
||||||
year->setItems(m_centry);
|
|
||||||
year->setFixedWidth(50);
|
|
||||||
layout->addWidget(year);
|
|
||||||
|
|
||||||
QLabel* label = new QLabel(this);
|
QStringList monthValues{"01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"};
|
||||||
label->setText("/");
|
initBox(mMonthBox, monthValues, 56);
|
||||||
// label->setFixedHeight(110);
|
|
||||||
label->setAlignment(Qt::AlignCenter);
|
|
||||||
|
|
||||||
label->setFixedWidth(50);
|
addSplitLabel();
|
||||||
label->setObjectName("sliderSpliterLabel");
|
|
||||||
layout->addWidget(label);
|
|
||||||
|
|
||||||
|
QStringList days(monthValues);
|
||||||
month = new SlidePickerBox(this);
|
for (int i = 13; i <= 31; i++) {
|
||||||
QStringList m_mouth;
|
days << QString("%1").arg(i, 2);
|
||||||
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);
|
initBox(mDayBox, days, 56);
|
||||||
day->setItems(days);
|
|
||||||
layout->addWidget(day);
|
|
||||||
|
|
||||||
bigMonth << "01" << "03" << "05" << "07" << "08" << "10" << "12";
|
mBigMonthList.append({"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);
|
void DateSlidePickerBox::addSplitLabel() {
|
||||||
connect(month,&SlidePickerBox::valueChanged,this,&DateSlidePickerBox::leapYearAndFebruaryAdjust);
|
QLabel* splitLabel = new QLabel(this);
|
||||||
|
splitLabel->setText("/");
|
||||||
|
splitLabel->setAlignment(Qt::AlignCenter);
|
||||||
|
splitLabel->setFixedWidth(50);
|
||||||
|
splitLabel->setObjectName("sliderSpliterLabel");
|
||||||
|
mLayout->addWidget(splitLabel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DateSlidePickerBox::initBox(SlidePickerBox* aBox, const QStringList& aItemsValues, int width) {
|
||||||
|
aBox->setItems(aItemsValues);
|
||||||
|
mLayout->addWidget(aBox);
|
||||||
|
aBox->setFixedWidth(width);
|
||||||
|
connect(aBox, &SlidePickerBox::valueChanged, this, &DateSlidePickerBox::leapYearAndFebruaryAdjust);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DateSlidePickerBox::resizeLabel() {
|
void DateSlidePickerBox::resizeLabel() {
|
||||||
|
mHundredYearBox->resizeLabelWidth();
|
||||||
myear->resizeLabelWidth();
|
mTenYearBox->resizeLabelWidth();
|
||||||
tyear->resizeLabelWidth();
|
mYearBox->resizeLabelWidth();
|
||||||
year->resizeLabelWidth();
|
mMonthBox->resizeLabelWidth();
|
||||||
month->resizeLabelWidth();
|
mDayBox->resizeLabelWidth();
|
||||||
day->resizeLabelWidth();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString DateSlidePickerBox::getSelectedValue() {
|
QString DateSlidePickerBox::getSelectedValue() const{
|
||||||
return QString("%1%2%3-%4-%5").arg(myear->getSelectedValue()).
|
return QString("%1%2%3-%4-%5").arg(mHundredYearBox->getSelectedValue()).
|
||||||
arg(tyear->getSelectedValue()).arg(year->getSelectedValue())
|
arg(mTenYearBox->getSelectedValue()).arg(mYearBox->getSelectedValue())
|
||||||
.arg(month->getSelectedValue()).arg(day->getSelectedValue());
|
.arg(mMonthBox->getSelectedValue()).arg(mDayBox->getSelectedValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DateSlidePickerBox::setSelectedValue(const QString &val) {
|
void DateSlidePickerBox::setSelectedValue(const QString &val) {
|
||||||
myear->setSelectedValue(val.left(2));
|
mHundredYearBox->setSelectedValue(val.left(2));
|
||||||
tyear->setSelectedValue(val.left(3).right(1));
|
mTenYearBox->setSelectedValue(val.left(3).right(1));
|
||||||
year->setSelectedValue(val.left(4).right(1));
|
mYearBox->setSelectedValue(val.left(4).right(1));
|
||||||
QStringList sary = val.split('-');
|
QStringList splitList = val.split('-');
|
||||||
month->setSelectedValue(sary[1]);
|
mMonthBox->setSelectedValue(splitList[1]);
|
||||||
day->setSelectedValue(sary[2]);
|
mDayBox->setSelectedValue(splitList[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int DateSlidePickerBox::getYear() {
|
int DateSlidePickerBox::getYear() {
|
||||||
return QString("%1%2%3").arg(myear->getSelectedValue()).
|
return QString("%1%2%3").arg(mHundredYearBox->getSelectedValue()).
|
||||||
arg(tyear->getSelectedValue()).arg(year->getSelectedValue()).toInt();
|
arg(mTenYearBox->getSelectedValue()).arg(mYearBox->getSelectedValue()).toInt();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void DateSlidePickerBox::leapYearAndFebruaryAdjust() {
|
void DateSlidePickerBox::leapYearAndFebruaryAdjust() {
|
||||||
QString d = day->getSelectedValue();
|
QString d = mDayBox->getSelectedValue();
|
||||||
//闰年且二月
|
//闰年且二月
|
||||||
if (QDate::isLeapYear(getYear()) && month->getSelectedValue() == "02") {
|
if (QDate::isLeapYear(getYear()) && mMonthBox->getSelectedValue() == "02") {
|
||||||
//seq is important, must enable item firstly
|
//seq is important, must enable item firstly
|
||||||
day->enableItem("29");
|
mDayBox->enableItem("29");
|
||||||
if (d.toInt() > 29) {
|
if (d.toInt() > 29) {
|
||||||
day->setSelectedValue("29");
|
mDayBox->setSelectedValue("29");
|
||||||
}
|
}
|
||||||
|
|
||||||
day->disableItem("30");
|
mDayBox->disableItem("30");
|
||||||
day->disableItem("31");
|
mDayBox->disableItem("31");
|
||||||
}
|
}
|
||||||
//普通年份2月或其他月份
|
//普通年份2月或其他月份
|
||||||
else{
|
else{
|
||||||
//普通年份2月
|
//普通年份2月
|
||||||
if (month->getSelectedValue() == "02") {
|
if (mMonthBox->getSelectedValue() == "02") {
|
||||||
//seq is important, must set selected value firstly
|
//seq is important, must set selected value firstly
|
||||||
if (d.toInt() > 28) {
|
if (d.toInt() > 28) {
|
||||||
day->setSelectedValue("28");
|
mDayBox->setSelectedValue("28");
|
||||||
}
|
}
|
||||||
day->disableItem("29");
|
mDayBox->disableItem("29");
|
||||||
day->disableItem("30");
|
mDayBox->disableItem("30");
|
||||||
day->disableItem("31");
|
mDayBox->disableItem("31");
|
||||||
}
|
}
|
||||||
//其他月份
|
//其他月份
|
||||||
else{
|
else{
|
||||||
|
mDayBox->enableItem("29");
|
||||||
day->enableItem("29");
|
mDayBox->enableItem("30");
|
||||||
day->enableItem("30");
|
|
||||||
if (isBigMonth()){
|
if (isBigMonth()){
|
||||||
day->enableItem("31");
|
mDayBox->enableItem("31");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
//seq is important, must set selected value firstly
|
//seq is important, must set selected value firstly
|
||||||
if (d == "31") {
|
if (d == "31") {
|
||||||
day->setSelectedValue("30");
|
mDayBox->setSelectedValue("30");
|
||||||
}
|
}
|
||||||
day->disableItem("31");
|
mDayBox->disableItem("31");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// day->setSelectedValue(d);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DateSlidePickerBox::isBigMonth() {
|
bool DateSlidePickerBox::isBigMonth() const {
|
||||||
return bigMonth.contains(month->getSelectedValue());
|
return mBigMonthList.contains(mMonthBox->getSelectedValue());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,26 +8,32 @@
|
|||||||
#include <QWidget>
|
#include <QWidget>
|
||||||
#include "SlidePickerBox.h"
|
#include "SlidePickerBox.h"
|
||||||
#include <QDate>
|
#include <QDate>
|
||||||
|
|
||||||
class QHBoxLayout;
|
class QHBoxLayout;
|
||||||
|
|
||||||
class DateSlidePickerBox:public QWidget {
|
class DateSlidePickerBox:public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit DateSlidePickerBox(QWidget *parent = nullptr);
|
explicit DateSlidePickerBox(QWidget *parent = nullptr);
|
||||||
QString getSelectedValue();
|
QString getSelectedValue() const;
|
||||||
void setSelectedValue(const QString& val);
|
void setSelectedValue(const QString& val);
|
||||||
void resizeLabel();
|
void resizeLabel();
|
||||||
SlidePickerBox* myear;
|
|
||||||
SlidePickerBox* tyear;
|
|
||||||
SlidePickerBox* year;
|
|
||||||
SlidePickerBox* month;
|
|
||||||
SlidePickerBox* day;
|
|
||||||
public Q_SLOTS:
|
public Q_SLOTS:
|
||||||
void leapYearAndFebruaryAdjust();
|
void leapYearAndFebruaryAdjust();
|
||||||
private:
|
private:
|
||||||
int getYear();
|
int getYear();
|
||||||
QStringList bigMonth;
|
QStringList mBigMonthList;
|
||||||
bool isBigMonth();
|
bool isBigMonth() const;
|
||||||
QHBoxLayout* layout;
|
QHBoxLayout* mLayout;
|
||||||
|
SlidePickerBox* mHundredYearBox;
|
||||||
|
SlidePickerBox* mTenYearBox;
|
||||||
|
SlidePickerBox* mYearBox;
|
||||||
|
SlidePickerBox* mMonthBox;
|
||||||
|
SlidePickerBox* mDayBox;
|
||||||
|
void initBox(SlidePickerBox* aBox, const QStringList& aItemsValues, int width = 50);
|
||||||
|
|
||||||
|
void addSplitLabel();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user