QT系统自带日历控件
QCalendarWidget *m_caledar = NULL; //日历控件
m_caledar = new QCalendarWidget(ui.m_widget_DOB_2);
m_caledar->setGeometry(0, 0, 303, 197);//高度一定不能小于197,否则显示不全
m_caledar->setGridVisible(false);
m_caledar->setHorizontalHeaderFormat(QCalendarWidget::ShortDayNames);
m_caledar->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);//不显示星期数
/*根据当前系统设置语言种类对日历的文本进行语言种类切换*/
SystemLanguageConfigModel* p_system_language_config = NULL;
p_system_language_config = GetGlobalSystemLanguageConfigModel();
QString system_language_static = p_system_language_config->GetLanguage();
if (system_language_static == "en")
{
m_caledar->setLocale(QLocale::English);
}
else
{
m_caledar->setLocale(QLocale::Chinese);
}
/样式设计/
QString strCaledarSyte = QString(“QCalendarWidget QTabWidget{alternate-background-color:#0d0d0d;background-color#141414;color:#ffffff;font:16px;}”
“QSpinBox{color:#999999;background-color:#1D2838;font-family:“思源黑体”;font-size:16px;font-weight:700;}”
“QSpinBox::down-button{image:url(./SystemConfig/StyleUI/Pic/AddingPatientStepTwoView/down_arrow.png);}”
“QSpinBox::up-button{image:url(./SystemConfig/StyleUI/Pic/AddingPatientStepTwoView/up_arrow.png);}”
“QMenu{background-color:#2d2d2d; margin:0px 2px 2px 2px;}”
“QMenu::item{font-size:14px;font-family:“思源黑体”;color:#999999;border-bottom:2px solid black;padding:5px 10px 5px 5px;background-color:#2d2d2d;}”
“QMenu::item:selected{color:#FFFFFF;background-color:#00add5;}”
“QToolButton#qt_calendar_monthbutton,#qt_calendar_yearbutton{color:#9ea5a9;font:14px;}”
“QWidget#qt_calendar_navigationbar{background-color:#141414;color:#ffffff;font:16px;}”
“QTableView{alternate-background-color:#0d0d0d;background-color:#141414;color:#ffffff;font-family:“Arial”;font:16px;}”);
this->m_caledar->setStyleSheet(strCaledarSyte);
this->m_caledar->setFocusPolicy(Qt::NoFocus);//设置无焦点,点击日历时无虚线框
/设置上端左右两个箭头按钮样式/
QToolButton prevBtn = m_caledar->findChild<QToolButton>(QLatin1String(“qt_calendar_prevmonth”));
prevBtn->setIcon(QIcon("./SystemConfig/StyleUI/Pic/AddingPatientStepTwoView/left_arrow.png"));
QToolButton bextBtn = m_caledar->findChild<QToolButton>(QLatin1String(“qt_calendar_nextmonth”));
bextBtn->setIcon(QIcon("./SystemConfig/StyleUI/Pic/AddingPatientStepTwoView/right_arrow.png"));
QSpinBox spinBox = m_caledar->findChild<QSpinBox>(QLatin1String(“qt_calendar_yearedit”));
/设置年份最大值和最小值/
spinBox->setMinimum(1900);//最小年份为1900年
spinBox->setMaximum(2200);//最大年份为2200年
/点击日历选中信号槽/
connect(m_caledar, SIGNAL(clicked(const QDate &)), this, SLOT(SetEditeDataSlot(const QDate &)));
/***********************************************************************/
/ 日期进行设置显示 /
/***********************************************************************/
void AddingPatientStepTwoView::SetEditeDataSlot(const QDate &date)
{
m_hasseledate = m_caledar->selectedDate();
QString select_data = m_hasseledate.toString(“yyyyMMdd”);
if (select_data.toInt() < 19000000 || select_data.toInt() > 22000000)
{
m_caledar->showToday();
this->ui.m_DOBLineEdit->setText("");
this->SetDOBDataIsValid(true);
this->ui.m_widget_DOB_2->setVisible(false);
return;
}
QDateTime data = QDateTime::currentDateTime();//当前日期和时间
QString str_current_data = data.toString("yyyyMMdd");
QLocale locale = QLocale::English;//指定英文显示
//QLocale locale = QLocale::Chinese;//指定中文显示
//QLocale locale = QLocale::Japanese;//指定日文显示
if (str_current_data.toInt() <= select_data.toInt() || select_data.toInt() < 0)
{
this->m_patient_birthday = "";
this->ui.m_widget_DOB_2->setVisible(false);
if (str_current_data.toInt() == select_data.toInt())
{
QString long_date_format = locale.toString(data, this->m_long_date_format);
this->ui.m_DOBLineEdit->setText(long_date_format);
}
else
{
this->ui.m_DOBLineEdit->setText("");
}
//ui.m_DobIsInvalidLabel->setVisible(true);
this->SetDOBDataIsValid(true);
return;
}
QString long_date_format = locale.toString(m_hasseledate, this->m_long_date_format);
this->m_patient_birthday = m_hasseledate.toString("yyyy-MM-dd");
this->ui.m_DOBLineEdit->setText(long_date_format);
Sleep(10);
this->ui.m_widget_DOB_2->setVisible(false);
this->SetDOBDataIsValid(false);
}
}
/***********************************************************************/
/ 生日是否有效提示语显示 /
/***********************************************************************/
void AddingPatientStepTwoView::SetDOBDataIsValid(bool is_Valid)
{
if (is_Valid)
{
ui.m_DobIsInvalidLabel->setVisible(true);
ui.m_DobIsValidLabel->setVisible(false);
}
else
{
ui.m_DobIsInvalidLabel->setVisible(false);
ui.m_DobIsValidLabel->setVisible(true);
}
}
/日历初始化/
/***********************************************************************/
/ 点击日历设置按钮 /
/***********************************************************************/
void AddingPatientStepTwoView::ShowCalenderSlot()
{
QTextCharFormat selectday;
//刷新日历表背景颜色
QBrush brush;
QColor color("#141414");
brush.setColor(color);
selectday.setBackground(brush);
m_caledar->setDateTextFormat(m_hasseledate, selectday);
selectday.setBackground(Qt::gray);
m_caledar->setDateTextFormat(QDate::currentDate(), selectday);
m_caledar->setHorizontalHeaderFormat(QCalendarWidget::ShortDayNames);
ui.m_widget_DOB_2->setVisible(true);
}
效果如下: