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() 函数获取当前选择的日期。通过设置minimumDatemaximumDate 属性,可以将用户的选择限制在给定的日期范围内。另外,也可以使用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::SingleLetterDayNames1页眉显示单字母缩写的日名(如 M 代表星期一)。
QCalendarWidget::ShortDayNames2页眉显示日名的简短缩写(如 Mon 代表星期一)。
QCalendarWidget::LongDayNames3页眉显示完整的日名(如星期一)。
QCalendarWidget::NoHorizontalHeader0页眉隐藏。

另请参阅 horizontalHeaderFormat() 和VerticalHeaderFormat

enum QCalendarWidget::SelectionMode

该枚举描述了为用户在日历中选择日期提供的选择类型。

常数说明
QCalendarWidget::NoSelection0不能选择日期。
QCalendarWidget::SingleSelection1可以选择单个日期。

另请参阅 selectionMode

enum QCalendarWidget::VerticalHeaderFormat

该枚举类型定义了垂直标题可显示的各种格式。

常数描述
QCalendarWidget::ISOWeekNumbers1页眉显示 ISO 周号,如QDate::weekNumber() 所述。
QCalendarWidget::NoVerticalHeader0页眉隐藏。

另请参阅 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));

设置最大日期时,如果选择范围无效,minimumDateselectedDate 属性将被调整。如果提供的日期不是有效的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));

设置最小日期时,如果选择范围无效,maximumDateselectedDate 属性将被调整。如果提供的日期不是有效的QDate 对象,setMinimumDate() 函数不会执行任何操作。

默认的最小日期是公元前 4714 年 11 月 25 日。您可以调用 clearMinimumDate() 恢复默认日期(自 Qt 6.6 起)。

访问函数:

QDate minimumDate() const
void setMinimumDate(QDate date)
void clearMinimumDate()

另请参阅 setDateRange()。

导航栏是否显示由该属性决定。

当该属性为true (默认值)时,下一个月、上一个月、月份选择、年份选择控件会显示在顶部。

当该属性设置为 false 时,这些控件将被隐藏。

访问功能:

bool isNavigationBarVisible() const
void setNavigationBarVisible(bool visible)

selectedDate : QDate

该属性保存当前选定的日期。

所选日期必须在minimumDatemaximumDate 属性指定的日期范围内。默认情况下,所选日期为当前日期。

访问功能:

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)

当当前显示的月份发生变化时,就会发出该信号。新的yearmonth 将作为参数传递。

另请参阅 setCurrentPage() 。

QMap<QDate, QTextCharFormat> QCalendarWidget::dateTextFormat() const

返回一个从QDateQTextCharFormatQMap ,显示所有使用特殊格式的日期,这种格式会改变日期的显示方式。

另请参阅 setDateTextFormat().

QTextCharFormat QCalendarWidget::dateTextFormat(QDate date) const

返回dateQTextCharFormat 。如果日期没有特别渲染,字符格式可以为空。

[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

使用给定的painterrect 绘制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)

通过设置minimumDatemaximumDate 属性来定义日期范围。

日期范围限制了用户的选择,即用户只能选择指定日期范围内的日期。请注意

QCalendarWidget *calendar;

calendar->setDateRange(min, max);

类似于

QCalendarWidget *calendar;

calendar->setMinimumDate(min);
calendar->setMaximumDate(max);

如果minmax 参数不是有效的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)

设置用于显示星期的文本字符格式dayOfWeekformat 。在前景和背景颜色方面,该格式优先于页眉格式。其他文本格式信息取自页眉格式。

另请参阅 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.