简述
QCalendarWidget类提供了基于月份的日历小部件,允许用户选择日期。
该小部件已使用系统当前的月份和年份进行了初始化,同时QCalendarWidget提供了几个公共插槽以更改显示的年份和月份。
功能详述
默认情况下,选择今天的日期,并且用户可以使用鼠标和键盘选择日期。可以使用selectedDate()函数检索当前选择的日期。通过设置minimumDate和maximumDate属性,可以将用户选择限制在给定的日期范围内。或者,可以使用setDateRange()槽函数一次性设置两个属性。将selectionMode属性设置为NoSelection可以完全禁止用户选择。请注意,还可以使用setSelectedDate()插槽以编程方式选择日期。
可以分别使用monthShown()和yearShown()函数检索当前显示的月份和年份。
新创建的日历窗口小部件使用缩写的日期名称,并且星期六和星期日都标记为红色。默认日历网格不可见。将显示星期数。第一列日期是日历语言环境的一周的第一天。
通过将horizontalHeaderFormat属性设置为QCalendarWidget :: SingleLetterDayNames,可以将天的符号更改为单个字母的缩写(“ M”表示“ Monday”)。将相同的属性设置为QCalendarWidget :: LongDayNames可使标题显示完整的日期名称。通过将verticalHeaderFormat属性设置为QCalendarWidget :: NoVerticalHeader可以删除星期数。可以通过使用setGridVisible()函数将gridVisible属性设置为true来打开日历网格。
最后,可以使用setFirstDayOfWeek()函数更改第一列中的日期。
QCalendarWidget类还提供了三个信号:selectionChanged(),activated()和currentPageChanged();从而可以响应用户交互。
通过将QTextCharFormat设置为某些特殊的工作日,特殊的日期或用于标题的呈现,可以很大程度上自定义标题,工作日或单日的呈现。
日历窗口小部件仅使用QTextCharFormat中的属性的子集。当前,前景,背景和字体属性用于确定小部件中各个单元的呈现。
使用
效果
源码
label = new QLabel;
label->setAlignment(Qt::AlignCenter);
QCalendarWidget *calendar = new QCalendarWidget;
calendar->setGridVisible(true);
calendar->setFirstDayOfWeek(Qt::Tuesday);
QGridLayout *gridLayout = new QGridLayout;
gridLayout->addWidget(calendar);
gridLayout->addWidget(label);
this->setLayout(gridLayout);
connect(calendar, &QCalendarWidget::clicked, [&](QDate date){
label->setText(date.toString("yyyy年 MM月 dd日 dddd"));
});
常用设置
日期范围
通过设置日期范围,让用户只能选择这个范围内的日期。方法如下
QDate min, max;
min.setDate(1988, 10, 1);
max.setDate(2100, 12, 1);
QCalendarWidget *calendar;
calendar->setDateRange(min, max);
设置第一列
默认情况下,第一列的值是当地一周的第一天,我们可以通过setFirstDayOfWeek来设置,方法如下
setFirstDayOfWeek(Qt::Monday)//Qt::Tuesday;Qt::Wednesday;Qt::Thursday;...
效果
设置网格与导航栏可见性
设置方法如下
QCalendarWidget *calendar;
calendar->setGridVisible(true);
calendar->setNavigationBarVisible(true);
效果
水平头部与垂直头部设置
设置方法如下
calendar->setHorizontalHeaderFormat(QCalendarWidget::LongDayNames);
calendar->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);
效果
枚举:QCalendarWidget::HorizontalHeaderFormat
常量 | 值 | 描述 |
---|---|---|
QCalendarWidget::SingleLetterDayNames | 1 | 标题显示日期名称的单字母缩写(例如,星期一为M)。 |
QCalendarWidget::ShortDayNames | 2 | 标题显示日期名称的简短缩写(例如,星期一为星期一)。 |
QCalendarWidget::LongDayNames | 3 | 标头显示完整的日期名称(例如星期一)。 |
QCalendarWidget::NoHorizontalHeader | 0 | 标题被隐藏。 |
枚举:QCalendarWidget::VerticalHeaderFormat
常量 | 值 | 描述 |
---|---|---|
QCalendarWidget::ISOWeekNumbers | 1 | 标题显示ISO周编号,如QDate :: weekNumber()所述。 |
QCalendarWidget::NoVerticalHeader | 0 | 标题被隐藏。 |
总结
通过上面的介绍,我们对QCalendarWidget的基本用法有了初步了解,后面可以根据自己的需要利用QTextCharFormat进行样式的开发。