QCalendarWidget 类

QCalendarWidget 类提供了一个基于月度的日历小部件,允许用户选择一个日期。更多信息...

头文件 #include <QCalendarWidget>
CMakefind_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmakeQT += widgets
继承 QWidget

公共类型

枚举HorizontalHeaderFormat { SingleLetterDayNames, ShortDayNames, LongDayNames, NoHorizontalHeader }
枚举SelectionMode { NoSelection, SingleSelection }
枚举VerticalHeaderFormat { ISOWeekNumbers, NoVerticalHeader }

属性

公共函数

QCalendarWidget(QWidget *parent = nullptr)
virtual~QCalendarWidget()
QCalendarcalendar() const
voidclearMaximumDate()
voidclearMinimumDate()
intdateEditAcceptDelay() const
QMap<QDate, QTextCharFormat>dateTextFormat() const
QTextCharFormatdateTextFormat(QDate date) const
Qt::DayOfWeekfirstDayOfWeek() const
QTextCharFormatheaderTextFormat() const
QCalendarWidget::HorizontalHeaderFormathorizontalHeaderFormat() const
boolisDateEditEnabled() const
boolisGridVisible() const
boolisNavigationBarVisible() const
QDatemaximumDate() const
QDateminimumDate() const
intmonthShown() const
QDateselectedDate() const
QCalendarWidget::SelectionModeselectionMode() const
voidsetCalendar(QCalendar c)
voidsetDateEditAcceptDelay(int delay)
voidsetDateEditEnabled(bool enable)
voidsetDateTextFormat(QDate date, const QTextCharFormat &format)
voidsetFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
voidsetHeaderTextFormat(const QTextCharFormat &format)
voidsetHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
voidsetMaximumDate(QDate date)
voidsetMinimumDate(QDate date)
voidsetSelectionMode(QCalendarWidget::SelectionMode mode)
voidsetVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)
voidsetWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format)
QCalendarWidget::VerticalHeaderFormatverticalHeaderFormat() const
QTextCharFormatweekdayTextFormat(Qt::DayOfWeek dayOfWeek) const
intyearShown() const

重新实现的公共函数

virtual QSizeminimumSizeHint() const override
virtual QSizesizeHint() const override

公共槽

voidsetCurrentPage(int year, int month)
voidsetDateRange(QDate min, QDate max)
voidsetGridVisible(bool show)
voidsetNavigationBarVisible(bool visible)
voidsetSelectedDate(QDate date)
voidshowNextMonth()
voidshowNextYear()
voidshowPreviousMonth()
voidshowPreviousYear()
voidshowSelectedDate()
voidshowToday()

信号

voidactivated(QDate date)
voidclicked(QDate date)
voidcurrentPageChanged(int year, int month)
voidselectionChanged()

受保护的函数

virtual voidpaintCell(QPainter *painter, const QRect &rect, QDate date) const
voidupdateCell(QDate date)
voidupdateCells()

重新实现的受保护函数

virtual boolevent(QEvent *event) override
virtual booleventFilter(QObject *watched, QEvent *event) override
virtual voidkeyPressEvent(QKeyEvent *event) override
virtual voidmousePressEvent(QMouseEvent *event) override
virtual voidresizeEvent(QResizeEvent *event) override

详细描述

小部件以当前月份和年份初始化,但QCalendarWidget提供了几个公共槽来更改显示的年份和月份。

默认情况下,今日日期被选中,用户可以使用鼠标和键盘选择日期。当前选中的日期可以使用selectedDate()函数检索。可以通过设置minimumDatemaximumDate属性来限制用户选择日期范围。或者,可以使用setDateRange()便利槽一次设置这两个属性。将selectionMode属性设置为NoSelection以禁止用户选择。请注意,还可以使用setSelectedDate()槽以编程方式选择日期。

可以使用monthShown()和yearShown()函数分别检索当前显示的月份和年份。

新创建的日历小部件使用缩略的星期名称,周六和周日用红色标记。日历网格不可见。显示周数,第一列的日是日历本地的第一周。

可以通过将horizontalHeaderFormat属性设置为QCalendarWidget::SingleLetterDayNames来将日期的表示改变为单个字母缩写(例如,“M”代表“星期一”)。将该属性设置为QCalendarWidget::LongDayNames将使标题显示完整的日名称。通过将verticalHeaderFormat属性设置为QCalendarWidget::NoVerticalHeader可以删除周数。可以通过使用gridVisible属性设置为true来通过setGridVisible()函数打开日历网格

QCalendarWidget *calendar;
calendar->setGridVisible(true);

最后,可以使用setFirstDayOfWeek()函数改变第一列的日。

QCalendarWidget类还提供了三个信号,selectionChangedactivatedcurrentPageChanged,使得响应用户交互成为可能。

可以通过为某些特殊的工作日、特定日期或标题的渲染设置QTextCharFormat来在很大程度上自定义标题、工作日或单个日的渲染。

日历小部件仅使用QTextCharFormat属性的一部分。目前,使用前景、背景和字体属性来确定小部件中单独单元格的渲染。

另请参阅QDateQDateEditQTextCharFormat

成员类型文档

enum QCalendarWidget::HorizontalHeaderFormat

此枚举类型定义了水平标题可以显示的各种格式。

常数描述
QCalendarWidget::SingleLetterDayNames1标题显示日名称的单个字母缩写(例如,M代表星期一)。
QCalendarWidget::ShortDayNames2标题显示日名称的短缩写(例如,Mon代表星期一)。
QCalendarWidget::LongDayNames3标题显示完整的日名称(例如,星期一)。
QCalendarWidget::NoHorizontalHeader0标题栏已隐藏。

另请参阅 horizontalHeaderFormat() 和 VerticalHeaderFormat

枚举 QCalendarWidget::SelectionMode

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

常数描述
QCalendarWidget::NoSelection0无法选择日期。
QCalendarWidget::SingleSelection1可以单独选择日期。

另请参阅 selectionMode

枚举 QCalendarWidget::VerticalHeaderFormat

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

常数描述
QCalendarWidget::ISOWeekNumbers1标题栏显示ISO周数字,如 QDate::weekNumber 所描述。
QCalendarWidget::NoVerticalHeader0标题栏已隐藏。

另请参阅 verticalHeaderFormatHorizontalHeaderFormat

属性文档

dateEditAcceptDelay : int

此属性指定在在接受之前,非活动日期编辑显示的时间。

如果日历小部件的日期编辑启用,则此属性指定自最新用户输入后,日期编辑保持打开的时间长度(以毫秒为单位)。一旦过了这段时间,日期编辑中指定的日期就会被接受,并关闭弹出窗口。

默认情况下,延迟定义为1500毫秒(1.5秒)。

访问函数

intdateEditAcceptDelay() const
voidsetDateEditAcceptDelay(int delay)

dateEditEnabled : bool

此属性指定是否启用日期编辑弹出窗口。

如果此属性启用,则按非修饰键将在焦点在小部件时弹出日期编辑,允许用户以当前区域设置的格式指定日期。

默认情况下,此属性是启用的。

QDateEdit相比,日期编辑看起来更为简单,但用户可以使用左右箭头键在字段之间导航,使用上下箭头键增加或减少单独的字段值,并使用数字键直接输入值。

访问函数

boolisDateEditEnabled() const
voidsetDateEditEnabled(bool enable)

另请参阅 QCalendarWidget::dateEditAcceptDelay

firstDayOfWeek : Qt::DayOfWeek

此属性保存了一个值,用于确定第一列显示的天数。

默认情况下,日历的区域设置中的第一周的第一天是在第一列中显示的天数。

访问函数

Qt::DayOfWeekfirstDayOfWeek() const
voidsetFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)

gridVisible : bool

此属性保存是否显示表格网格。

QCalendarWidget *calendar;
calendar->setGridVisible(true);

默认值是false。

访问函数

boolisGridVisible() const
voidsetGridVisible(bool show)

horizontalHeaderFormat : HorizontalHeaderFormat

此属性保存水平头部的格式。

默认值是 QCalendarWidget::ShortDayNames

访问函数

QCalendarWidget::HorizontalHeaderFormathorizontalHeaderFormat() const
voidsetHorizontalHeaderFormat(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 开始)。

访问函数

QDatemaximumDate() const
voidsetMaximumDate(QDate date)
voidclearMaximumDate()

另请参阅 setDateRange

minimumDate : QDate

此属性保存当前指定日期范围的最小日期。

用户将无法选择一个早于当前设置的最小日期的日期。

QCalendarWidget *calendar;
calendar->setGridVisible(true);
calendar->setMinimumDate(QDate(2006, 6, 19));

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

默认最小日期是公元前4714年11月25日。您可以通过调用 clearMinimumDate() 恢复此默认值(自 Qt 6.6 开始)。

访问函数

QDateminimumDate() const
voidsetMinimumDate(QDate date)
voidclearMinimumDate()

另请参阅 setDateRange

此属性保存导航栏是否显示

当此属性设置为 true(默认值)时,接下来的月份、上一个月份、月份选择、年份选择控件显示在顶部。

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

访问函数

boolisNavigationBarVisible() const
voidsetNavigationBarVisible(bool visible)

selectedDate : QDate

此属性保存当前选择的日期。

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

访问函数

QDateselectedDate() const
voidsetSelectedDate(QDate date)

另请参阅 setDateRange

selectionMode : SelectionMode

此属性保存用户可以在日历中进行的选择的类型

当此属性设置为 SingleSelection 时,用户可以使用鼠标或键盘在最小和最大允许日期之间选择日期。

当属性设置为 NoSelection 时,用户将无法选择日期,但它们仍然可以通过编程进行选择。请注意,当属性设置为 NoSelection 时,所选日期仍然是日历的所选日期。

默认值是 SingleSelection

访问函数

QCalendarWidget::SelectionModeselectionMode() const
voidsetSelectionMode(QCalendarWidget::SelectionMode mode)

verticalHeaderFormat : VerticalHeaderFormat

此属性保存了垂直标题的格式。

默认值是 QCalendarWidget::ISOWeekNumber。

访问函数

QCalendarWidget::VerticalHeaderFormatverticalHeaderFormat() const
voidsetVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)

成员函数文档

[显式] QCalendarWidget::QCalendarWidget(QWidget *parent = nullptr)

构建具有给定 parent 的日历小部件。

小部件使用当前月份和年份初始化,并选择今天的日期。

另请参阅 setCurrentPage

[虚拟 noexcept] QCalendarWidget::~QCalendarWidget()

销毁日历小部件。

[信号] void QCalendarWidget::activated(QDate date)

每当用户按下 Retur n 或 Enter 键或在日历小部件中双击一个 日期 时,都会发出此信号。

QCalendar QCalendarWidget::calendar() const

报告此小部件所使用的日历系统。

另请参阅 setCalendar

[信号] void QCalendarWidget::clicked(QDate date)

当鼠标点击时,会发出此信号。通过 date 指定鼠标点击的日期。仅当在有效日期上点击时才会发出此信号,例如,日期不在 minimumDate() 和 maximumDate() 之外。如果选择模式是 NoSelection,则不会发出此信号。

[信号] void QCalendarWidget::currentPageChanged(int year, int month)

当前显示的月份发生更改时,会发出此信号。将新 yearmonth 作为参数传递。

另请参阅 setCurrentPage

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

QDateQTextCharFormat 返回一个 QMap,显示所有使用特殊格式并改变其渲染的日期。

另请参阅 setDateTextFormat

QTextCharFormat QCalendarWidget::dateTextFormat(QDate date) const

返回用于渲染日期的 QTextCharFormat。如果日期未特别渲染,字符格式可以为空。

[覆盖虚保护] bool QCalendarWidget::event(QEvent *event)

重实现: QWidget::event(QEvent *event).

[覆盖虚保护] bool QCalendarWidget::eventFilter(QObject *watched, QEvent *event)

重实现: QObject::eventFilter(QObject *watched, QEvent *event).

QTextCharFormat QCalendarWidget::headerTextFormat() const

返回用于渲染标题的文本字符格式。

另请参阅setHeaderTextFormat().

[覆盖虚保护] void QCalendarWidget::keyPressEvent(QKeyEvent *event)

重实现: QWidget::keyPressEvent(QKeyEvent *event).

[覆盖虚] QSize QCalendarWidget::minimumSizeHint() const

重实现属性访问函数: QWidget::minimumSizeHint.

int QCalendarWidget::monthShown() const

返回当前显示的月份。月份从1到12编号。

另请参阅yearShown() 和 setCurrentPage().

[覆盖虚保护] void QCalendarWidget::mousePressEvent(QMouseEvent *event)

重实现: QWidget::mousePressEvent(QMouseEvent *event).

[虚保护] void QCalendarWidget::paintCell(QPainter *painter, const QRect &rect, QDate date) const

使用给定的 painterrect 绘制指定 date 的单元格。

[覆盖虚保护] void QCalendarWidget::resizeEvent(QResizeEvent *event)

重实现: QWidget::resizeEvent(QResizeEvent *event).

[信号] void QCalendarWidget::selectionChanged()

当当前选定的日期更改时,会发出此信号。

当前选定的日期可以通过鼠标或键盘更改,或者通过程序员使用 setSelectedDate() 更改。

另请参阅selectedDate().

void QCalendarWidget::setCalendar(QCalendar c)

将该设置为该小部件要使用的日历系统。

该小部件可以使用任何支持的日历系统。默认情况下,它使用公历。

另请参阅calendar()。

[槽位] void QCalendarWidget::setCurrentPage(int year, int month)

显示指定的年的月份,而不改变选中的日期。使用setSelectedDate()函数来更改选中的日期。

可以使用monthShown()函数来检索当前显示的月,使用yearShown()函数来检索当前显示的年。

另请参阅yearShown()、monthShown()、showPreviousMonth()、showNextMonth()、showPreviousYear()和showNextYear()。

[槽位] void QCalendarWidget::setDateRange(QDate min, QDate max)

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

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

QCalendarWidget *calendar;

calendar->setDateRange(min, max);

QCalendarWidget *calendar;

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

如果参数不是有效的QDate对象,则此函数不执行任何操作。

另请参阅setMinimumDate()和setMaximumDate()。

void QCalendarWidget::setDateTextFormat(QDate date, const QTextCharFormat &format)

将使用设置指定日期的渲染格式。

如果是null,则清除所有日期格式。

另请参阅dateTextFormat()。

void QCalendarWidget::setHeaderTextFormat(const QTextCharFormat &format)

将渲染标题的文本字符格式设置为。如果您还设置了星期文本格式,此格式的前景色和背景色将优先于标题的格式。其他格式化信息仍由标题的格式决定。

另请参阅headerTextFormat()。

void QCalendarWidget::setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format)

设置 week 中的 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

返回渲染周内某一天文本的字符格式。

另请参阅setWeekdayTextFormat() 和 headerTextFormat()。

int QCalendarWidget::yearShown() const

返回当前显示月份的年份。月份从1到12编号。

另请参阅monthShown() 和 setCurrentPage()。

© 2024 The Qt Company Ltd. 本文档中的贡献是各自所有者的版权。提供的文档是根据自由软件基金会发布的GNU自由文档许可协议第1.3版许可的。Qt及其相关标志是The Qt Company Ltd.在芬兰和其他国家/地区的商标。所有其他商标均为其各自所有者的财产。