QCalendarWidget Class
QCalendarWidget 类提供了一个基于月份的日历控件,允许用户选择日期。更多内容...
| 头文件: | #include <QCalendarWidget> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Widgets) target_link_libraries(mytarget PRIVATE Qt6::Widgets) |
| qmake: | QT += widgets |
| 继承自: | QWidget |
公共类型
| enum | HorizontalHeaderFormat { SingleLetterDayNames, ShortDayNames, LongDayNames, NoHorizontalHeader } |
| enum | SelectionMode { NoSelection, SingleSelection } |
| enum | VerticalHeaderFormat { ISOWeekNumbers, NoVerticalHeader } |
属性
|
|
公共函数
| QCalendarWidget(QWidget *parent = nullptr) | |
| virtual | ~QCalendarWidget() |
| QCalendar | calendar() const |
| void | clearMaximumDate() |
| void | clearMinimumDate() |
| int | dateEditAcceptDelay() const |
| QMap<QDate, QTextCharFormat> | dateTextFormat() const |
| QTextCharFormat | dateTextFormat(QDate date) const |
| Qt::DayOfWeek | firstDayOfWeek() const |
| QTextCharFormat | headerTextFormat() const |
| QCalendarWidget::HorizontalHeaderFormat | horizontalHeaderFormat() const |
| bool | isDateEditEnabled() const |
| bool | isGridVisible() const |
| bool | isNavigationBarVisible() const |
| QDate | maximumDate() const |
| QDate | minimumDate() const |
| int | monthShown() const |
| QDate | selectedDate() const |
| QCalendarWidget::SelectionMode | selectionMode() const |
| void | setCalendar(QCalendar c) |
| void | setDateEditAcceptDelay(int delay) |
| void | setDateEditEnabled(bool enable) |
| void | setDateTextFormat(QDate date, const QTextCharFormat &format) |
| void | setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek) |
| void | setHeaderTextFormat(const QTextCharFormat &format) |
| void | setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format) |
| void | setMaximumDate(QDate date) |
| void | setMinimumDate(QDate date) |
| void | setSelectionMode(QCalendarWidget::SelectionMode mode) |
| void | setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format) |
| void | setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format) |
| QCalendarWidget::VerticalHeaderFormat | verticalHeaderFormat() const |
| QTextCharFormat | weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const |
| int | yearShown() const |
重新实现的公共函数
| virtual QSize | minimumSizeHint() const override |
| virtual QSize | sizeHint() const override |
公共槽
| void | setCurrentPage(int year, int month) |
| void | setDateRange(QDate min, QDate max) |
| void | setGridVisible(bool show) |
| void | setNavigationBarVisible(bool visible) |
| void | setSelectedDate(QDate date) |
| void | showNextMonth() |
| void | showNextYear() |
| void | showPreviousMonth() |
| void | showPreviousYear() |
| void | showSelectedDate() |
| void | showToday() |
信号
| void | activated(QDate date) |
| void | clicked(QDate date) |
| void | currentPageChanged(int year, int month) |
| void | selectionChanged() |
受保护函数
| virtual void | paintCell(QPainter *painter, const QRect &rect, QDate date) const |
| void | updateCell(QDate date) |
| void | updateCells() |
重新实现的受保护函数
| virtual bool | event(QEvent *event) override |
| virtual bool | eventFilter(QObject *watched, QEvent *event) override |
| virtual void | keyPressEvent(QKeyEvent *event) override |
| virtual void | mousePressEvent(QMouseEvent *event) override |
| virtual void | resizeEvent(QResizeEvent *event) override |
详细说明

该控件初始化时采用当前的年和月,但 QCalendarWidget 提供了几个公共插槽,用于更改显示的年和月。
默认情况下,会选中今天的日期,用户可以使用鼠标和键盘选择日期。可以通过selectedDate()函数获取当前选中的日期。通过设置minimumDate 和maximumDate 属性,可以将用户的选择范围限制在给定的日期范围内。此外,还可以使用setDateRange()便捷槽一次性设置这两个属性。 将selectionMode 属性设置为NoSelection ,可完全禁止用户进行选择。请注意,也可以通过setSelectedDate()槽以编程方式选择日期。
可以通过monthShown() 和yearShown() 函数分别获取当前显示的月份和年份。
新创建的日历控件使用星期名称缩写,且周六和周日均以红色标注。日历网格不可见。周数会显示出来,且第一列的日期是该日历区域设置中的一周首日。
通过将horizontalHeaderFormat 属性设置为QCalendarWidget::SingleLetterDayNames ,可将日期显示形式更改为单字母缩写(例如“M”代表“星期一”)。将该属性设置为QCalendarWidget::LongDayNames ,则标题栏将显示完整的星期名称。 通过将verticalHeaderFormat 属性设置为QCalendarWidget::NoVerticalHeader ,可以移除周号。可通过使用setGridVisible()函数将gridVisible 属性设置为true来启用日历网格:
|
|
最后,可通过调用setFirstDayOfWeek()函数来修改第一列中的日期。
QCalendarWidget 类还提供了三个信号:selectionChanged()、activated() 和currentPageChanged(),从而能够响应用户交互。
通过为某些特定的星期几、特定日期或标题的显示设置QTextCharFormat ,可以对标题、星期几或单个日期的渲染进行大量自定义。
日历控件仅使用了QTextCharFormat 中的一部分属性。目前,控件使用 foreground、background 和 font 属性来确定控件中各个单元格的渲染效果。
另请参阅 QDate 、QDateEdit 以及QTextCharFormat 。
成员类型文档
enum QCalendarWidget::HorizontalHeaderFormat
此枚举类型定义了水平标题可显示的各种格式。
| 常量 | 值 | 描述 |
|---|---|---|
QCalendarWidget::SingleLetterDayNames | 1 | 标题显示星期名称的单字母缩写(例如,M 代表星期一)。 |
QCalendarWidget::ShortDayNames | 2 | 标题栏显示星期名称的简短缩写(例如,Mon 代表星期一)。 |
QCalendarWidget::LongDayNames | 3 | 标题显示完整的星期名称(例如“星期一”)。 |
QCalendarWidget::NoHorizontalHeader | 0 | 标题被隐藏。 |
另请参阅 horizontalHeaderFormat() 和VerticalHeaderFormat 。
enum QCalendarWidget::SelectionMode
此枚举描述了日历中为用户提供的日期选择类型。
| 常量 | 值 | 描述 |
|---|---|---|
QCalendarWidget::NoSelection | 0 | 无法选择日期。 |
QCalendarWidget::SingleSelection | 1 | 可以选择单个日期。 |
另请参阅 selectionMode 。
enum QCalendarWidget::VerticalHeaderFormat
此枚举类型定义了垂直标题可显示的各种格式。
| 常量 | 值 | 描述 |
|---|---|---|
QCalendarWidget::ISOWeekNumbers | 1 | 标题栏显示 ISO 周数,具体说明参见QDate::weekNumber()。 |
QCalendarWidget::NoVerticalHeader | 0 | 标题被隐藏。 |
另请参阅 verticalHeaderFormat() 和HorizontalHeaderFormat 。
属性文档
dateEditAcceptDelay : int
该属性用于指定非活动状态的日期编辑框在内容被接受之前显示的时间长度
如果日历控件的date edit is enabled ,则该属性指定日期编辑框在用户最近一次输入后保持打开状态的时间(以毫秒为单位)。该时间一过,日期编辑框中指定的日期即被接受,弹出窗口随即关闭。
默认情况下,延迟时间设置为 1500 毫秒(1.5 秒)。
访问函数:
| int | dateEditAcceptDelay() const |
| void | setDateEditAcceptDelay(int delay) |
dateEditEnabled : bool
该属性用于控制日期编辑弹出窗口是否启用
如果启用了此属性,当日历控件获得焦点时,按下非修饰键将弹出日期编辑窗口,允许用户按照当前区域设置的格式指定日期。
默认情况下,此属性处于启用状态。
该日期编辑框的外观比QDateEdit 更简洁,但允许用户使用左右方向键在字段之间导航,使用上下方向键增减单个字段的数值,并使用数字键直接输入数值。
访问函数:
| bool | isDateEditEnabled() const |
| void | setDateEditEnabled(bool enable) |
另请参阅 QCalendarWidget::dateEditAcceptDelay 。
firstDayOfWeek : Qt::DayOfWeek
该属性存储一个值,用于标识第一列中显示的日期。
默认情况下,第一列中显示的日期是日历所在地区/语言环境中的本周第一天。
访问函数:
| Qt::DayOfWeek | firstDayOfWeek() const |
| void | setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek) |
gridVisible : bool
该属性控制是否显示表格网格。
![]() |
|
默认值为 false。
访问函数:
| bool | isGridVisible() const |
| void | setGridVisible(bool show) |
horizontalHeaderFormat : HorizontalHeaderFormat
此属性用于指定水平标题的格式。
默认值为QCalendarWidget::ShortDayNames 。
访问函数:
| QCalendarWidget::HorizontalHeaderFormat | horizontalHeaderFormat() const |
| void | setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format) |
maximumDate : QDate
该属性存储当前指定日期范围中的最大日期。
用户将无法选择晚于当前设置的最大日期的日期。
|
|
设置最大日期时,如果选择范围不再有效,则会调整minimumDate 和selectedDate 属性。如果提供的日期不是有效的QDate 对象,setMaximumDate()函数将不执行任何操作。
默认最大日期为公元9999年12月31日。您可以通过调用 clearMaximumDate() 恢复此默认值(自 Qt 6.6 起)。
访问函数:
| QDate | maximumDate() const |
| void | setMaximumDate(QDate date) |
| void | clearMaximumDate() |
另请参阅 setDateRange()。
minimumDate : QDate
该属性保存当前指定日期范围的最早日期。
用户将无法选择早于当前设置的最小日期的日期。
|
|
设置最小日期时,如果选择范围不再有效,则会调整maximumDate 和selectedDate 属性。如果提供的日期不是有效的QDate 对象,setMinimumDate()函数将不执行任何操作。
默认的最小日期是公元前4714年11月25日。您可以通过调用 clearMinimumDate() 恢复此默认值(自 Qt 6.6 起)。
访问函数:
| QDate | minimumDate() const |
| void | setMinimumDate(QDate date) |
| void | clearMinimumDate() |
另请参阅 setDateRange()。
navigationBarVisible : bool
该属性用于控制导航栏是否显示
当此属性设置为true (默认值)时,顶部会显示“下个月”、“上个月”、“选择月份”和“选择年份”控件。
当该属性设置为 false 时,这些控件将被隐藏。
访问函数:
| bool | isNavigationBarVisible() const |
| void | setNavigationBarVisible(bool visible) |
selectedDate : QDate
该属性存储当前选定的日期。
所选日期必须在minimumDate 和maximumDate 属性指定的日期范围内。默认情况下,所选日期为当前日期。
访问函数:
| QDate | selectedDate() const |
| void | setSelectedDate(QDate date) |
另请参阅 setDateRange()。
selectionMode : SelectionMode
该属性用于指定用户在日历中可进行的选择类型
当此属性设置为SingleSelection 时,用户可以使用鼠标或键盘在允许的最小日期和最大日期范围内选择日期。
当该属性设置为NoSelection 时,用户将无法选择日期,但仍可通过编程方式进行选择。请注意,当该属性设置为NoSelection 时所选的日期,仍将是日历中的选定日期。
默认值为SingleSelection 。
访问函数:
| QCalendarWidget::SelectionMode | selectionMode() const |
| void | setSelectionMode(QCalendarWidget::SelectionMode mode) |
verticalHeaderFormat : VerticalHeaderFormat
该属性用于指定垂直标题的格式。
默认值为 QCalendarWidget::ISOWeekNumber。
访问函数:
| QCalendarWidget::VerticalHeaderFormat | verticalHeaderFormat() const |
| void | setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format) |
成员函数文档
[explicit] QCalendarWidget::QCalendarWidget(QWidget *parent = nullptr)
根据给定的parent 构建一个日历小部件。
该控件初始化时采用当前的月份和年份,且当前选中的日期为今天。
另请参阅 setCurrentPage()。
[virtual noexcept] QCalendarWidget::~QCalendarWidget()
删除日历小部件。
[signal] void QCalendarWidget::activated(QDate date)
每当用户按下“Return”或“Enter”键,或在日历控件中双击date 时,都会发出此信号。
QCalendar QCalendarWidget::calendar() const
报告此小部件所使用的日历系统。
另请参阅 setCalendar()。
[signal] void QCalendarWidget::clicked(QDate date)
当鼠标按钮被点击时,会发出此信号。鼠标被点击的日期由date 指定。该信号仅在点击有效日期时发出,例如,日期不在minimumDate()和maximumDate()的范围之外。如果选择模式为NoSelection ,则不会发出此信号。
[signal] void QCalendarWidget::currentPageChanged(int year, int month)
当当前显示的月份发生变化时,会触发此信号。新的year 和month 将作为参数传递。
另请参阅 setCurrentPage()。
QMap<QDate, QTextCharFormat> QCalendarWidget::dateTextFormat() const
返回一个QMap ,其范围从QDate 到QTextCharFormat ,显示所有采用特殊格式且会改变其显示效果的日期。
另请参阅 setDateTextFormat()。
QTextCharFormat QCalendarWidget::dateTextFormat(QDate date) const
返回date 的QTextCharFormat 。如果日期未进行特殊渲染,则char格式可以为空。
[override virtual protected] bool QCalendarWidget::event(QEvent *event)
重写了:QWidget::event(QEvent *event)。
[override virtual protected] bool QCalendarWidget::eventFilter(QObject *watched, QEvent *event)
重写了:QObject::eventFilter(QObject *watched, QEvent *event)。
QTextCharFormat QCalendarWidget::headerTextFormat() const
返回用于渲染标题的文本字符格式。
另请参阅 setHeaderTextFormat()。
[override virtual protected] void QCalendarWidget::keyPressEvent(QKeyEvent *event)
重写了:QWidget::keyPressEvent(QKeyEvent *event)。
[override virtual] QSize QCalendarWidget::minimumSizeHint() const
重新实现了属性QWidget::minimumSizeHint 的访问函数。
int QCalendarWidget::monthShown() const
返回当前显示的月份。月份编号为1至12。
另请参阅 yearShown() 和setCurrentPage()。
[override virtual protected] void QCalendarWidget::mousePressEvent(QMouseEvent *event)
重写了:QWidget::mousePressEvent(QMouseEvent *event)。
[virtual protected] void QCalendarWidget::paintCell(QPainter *painter, const QRect &rect, QDate date) const
使用给定的painter 和rect ,为由给定的date 指定的单元格填充颜色。
[override virtual protected] void QCalendarWidget::resizeEvent(QResizeEvent *event)
重写了:QWidget::resizeEvent(QResizeEvent *event)。
[signal] void QCalendarWidget::selectionChanged()
当当前选定的日期发生变化时,会触发此信号。
用户可通过鼠标或键盘更改当前选定的日期,程序员也可通过setSelectedDate() 进行更改。
另请参阅 selectedDate()。
void QCalendarWidget::setCalendar(QCalendar c)
将c 设置为该小部件使用的日历系统。
该小部件可以使用任何受支持的日历系统。默认情况下,它使用公历。
另请参阅 calendar()。
[slot] void QCalendarWidget::setCurrentPage(int year, int month)
显示指定year 的month ,同时不更改所选日期。若要更改所选日期,请使用setSelectedDate()函数。
可通过monthShown()和yearShown()函数分别获取当前显示的月份和年份。
另请参阅 yearShown()、monthShown()、showPreviousMonth()、showNextMonth()、showPreviousYear() 以及showNextYear()。
[slot] void QCalendarWidget::setDateRange(QDate min, QDate max)
通过设置minimumDate 和maximumDate 属性来定义日期范围。
该日期范围会限制用户的选择,即用户只能选择指定日期范围内的日期。请注意,
QCalendarWidget *calendar;
calendar->setDateRange(min, max);这与
QCalendarWidget *calendar;
calendar->setMinimumDate(min);
calendar->setMaximumDate(max);如果min 或max 参数不是有效的QDate 对象,则此函数不执行任何操作。
另请参阅 setMinimumDate() 和setMaximumDate()。
void QCalendarWidget::setDateTextFormat(QDate date, const QTextCharFormat &format)
将用于渲染给定date 的格式设置为format 中指定的格式。
如果date 为 null,则清除所有日期格式。
另请参阅 dateTextFormat()。
void QCalendarWidget::setHeaderTextFormat(const QTextCharFormat &format)
将用于渲染标题的文本字符格式设置为format 。如果您还设置了星期几的文本格式,则该格式的前景色和背景色将优先于标题的格式。其他格式信息仍由标题的格式决定。
另请参阅 headerTextFormat()。
void QCalendarWidget::setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format)
将一周中某一天的文本字符格式dayOfWeek 设置为format 。在前景色和背景色方面,该格式将优先于标题格式。其他文本格式信息则从标题格式中获取。
另请参阅 weekdayTextFormat() 和setHeaderTextFormat()。
[slot] void QCalendarWidget::showNextMonth()
显示相对于当前显示月份的下一个月份。请注意,所选日期不会发生变化。
另请参阅 showPreviousMonth()、setCurrentPage() 以及setSelectedDate()。
[slot] void QCalendarWidget::showNextYear()
显示相对于当前显示年份而言,明年中当前显示的月份。请注意,所选日期不会发生变化。
另请参阅 showPreviousYear()、setCurrentPage(),以及setSelectedDate()。
[slot] void QCalendarWidget::showPreviousMonth()
显示相对于当前显示月份的上个月。请注意,所选日期不会发生变化。
另请参阅 showNextMonth()、setCurrentPage() 和setSelectedDate()。
[slot] void QCalendarWidget::showPreviousYear()
显示相对于当前显示年份而言,上一年的当前月份。请注意,所选日期不会发生变化。
另请参阅 showNextYear()、setCurrentPage(),以及setSelectedDate()。
[slot] void QCalendarWidget::showSelectedDate()
显示所选日期的月份。
另请参阅 selectedDate() 和setCurrentPage()。
[slot] void QCalendarWidget::showToday()
显示今天日期的月份。
另请参阅 selectedDate() 和setCurrentPage()。
[override virtual] QSize QCalendarWidget::sizeHint() const
重新实现了属性QWidget::sizeHint 的访问函数。
[protected] void QCalendarWidget::updateCell(QDate date)
更新由给定的date 指定的单元格,除非已禁用更新功能或该单元格被隐藏。
另请参阅 updateCells()、yearShown() 和monthShown()。
[protected] void QCalendarWidget::updateCells()
除非已禁用更新功能,否则将更新所有可见单元格。
另请参阅 updateCell()。
QTextCharFormat QCalendarWidget::weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const
返回用于渲染星期几的文本字符格式dayOfWeek 。
另请参阅 setWeekdayTextFormat() 和headerTextFormat()。
int QCalendarWidget::yearShown() const
返回当前显示月份所属的年份。月份编号为 1 到 12。
另请参阅 monthShown() 和setCurrentPage()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.


