QCalendarWidget Class
QCalendarWidget 类提供了一个基于月度的日历部件,允许用户选择日期。更多
Header: | #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,可以打开日历网格:
QCalendarWidget *calendar; calendar->setGridVisible(true); |
最后,可以使用setFirstDayOfWeek() 函数更改第一列中的日期。
QCalendarWidget 类还提供了三个信号:selectionChanged(),activated() 和currentPageChanged() ,从而可以对用户交互做出响应。
通过为某些特殊工作日、特殊日期或标题的渲染设置QTextCharFormat's,可以在很大程度上自定义标题、工作日或单日的渲染。
日历部件只使用QTextCharFormat 中的部分属性。目前,前景、背景和字体属性用于确定窗口部件中各个单元格的渲染。
另请参阅 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
该属性用于确定是否显示表格网格。
![]() |
QCalendarWidget *calendar; calendar->setGridVisible(true); |
默认值为 false。
访问功能:
bool | isGridVisible() const |
void | setGridVisible(bool show) |
horizontalHeaderFormat : HorizontalHeaderFormat
该属性用于保存水平标题的格式。
默认值为QCalendarWidget::ShortDayNames 。
访问功能:
QCalendarWidget::HorizontalHeaderFormat | horizontalHeaderFormat() const |
void | setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format) |
maximumDate : QDate
该属性保存当前指定日期范围的最大日期。
用户将无法选择在当前设置的最大日期之后的日期。
QCalendarWidget *calendar; calendar->setGridVisible(true); calendar->setMaximumDate(QDate(2006, 7, 3)); |
设置最大日期时,如果选择范围无效,minimumDate 和selectedDate 属性将被调整。如果提供的日期不是有效的QDate 对象,setMaximumDate() 函数不会执行任何操作。
默认的最大日期是西历 9999 年 12 月 31 日。您可以调用 clearMaximumDate() 恢复默认值(自 Qt 6.6 起)。
访问函数:
QDate | maximumDate() const |
void | setMaximumDate(QDate date) |
void | clearMaximumDate() |
另请参阅 setDateRange()。
minimumDate : QDate
该属性保存当前指定日期范围的最小日期。
用户将无法选择在当前设置的最小日期之前的日期。
QCalendarWidget *calendar; calendar->setGridVisible(true); calendar->setMinimumDate(QDate(2006, 6, 19)); |
设置最小日期时,如果选择范围无效,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)
每当用户按下回车键或回车键,或双击日历部件中的date 时,就会发出该信号。
QCalendar QCalendarWidget::calendar() const
报告此 widget 使用的日历系统。
另请参见 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
返回一个从QDate 到QTextCharFormat 的QMap ,显示所有使用特殊格式的日期,这种格式会改变日期的显示方式。
另请参阅 setDateTextFormat().
QTextCharFormat QCalendarWidget::dateTextFormat(QDate date) const
返回date 的QTextCharFormat 。如果日期没有特别渲染,字符格式可以为空。
[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 设置为该 widget 使用的日历系统。
该 widget 可以使用任何支持的日历系统。默认情况下,它使用公历。
另请参阅 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 为空,则清除所有日期格式。
另请参阅 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()。
© 2025 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.