QCalendarWidget使用用例总结

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);

}
效果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/xiao123456bin/article/details/89476582
今日推荐