文章目录
QCalendarWidget 类
QCalendarWidget类提供了一个基于月历的小部件,允许用户选择日期。
Header | #include < QCalendarWidget > |
---|---|
qmake | QT += widgets |
Inherits | QWidget |
Inherited By |
详细说明
小部件是用当前月份和年份初始化的,但是QCalendarWidget提供了几个公共槽来更改显示的年份和月份。
默认情况下,选择今天的日期,用户可以同时使用鼠标和键盘选择日期。可以使用selectedDate() 函数检索当前选定的日期。通过设置minimumDate和maximumDate属性,可以将用户选择限制到给定的日期范围。或者,可以使用setDateRange() 便利槽一次性设置这两个属性。将selectionMode属性设置为NoSelection以禁止用户进行选择。请注意,还可以使用setSelectedDate() 槽以编程方式选择日期。
可以分别使用 monthShown() 和 yearShow() 函数检索当前显示的月份和年份。
新创建的日历小部件使用缩写的日期名称,星期六和星期天都用红色标记。日历网格不可见。将显示周数,第一列“天”是日历区域设置的一周的第一天。
通过将horizontalHeaderFormat属性设置为QCalendarWidget::SingleLetterDayNames,可以将天的表示法更改为单字母缩写(“M”表示“Monday”)。将相同的属性设置为QCalendarWidget::LongDayNames会使标题显示完整的日期名称。通过将verticalHeaderFormat属性设置为QCalendarWidget::NoVerticalHeader,可以删除周数。通过使用setGridVisible() 函数将gridVisible属性设置为true,可以打开日历网格:
![]() |
---|
QCalendarWidget *calendar; calendar->setGridVisible(true); |
最后,可以使用setFirstDayOfWeek() 函数更改第一列中的日期。
QCalendarWidget类还提供了三个信号:selectionChanged() 、activated() 和currentPageChanged() ,从而可以响应用户交互。
通过为某些特殊工作日、特殊日期或头的呈现设置QTextCharFormat,可以在很大程度上定制头的呈现、工作日或单日。
日历小部件仅使用QTextCharFormat中的一部分属性。当前,前景、背景和字体属性用于确定小部件中单个单元格的呈现。
公共类型
enum HorizontalHeaderFormat
此枚举类型定义水平标头可以显示的各种格式。
Constant | Value | Description |
---|---|---|
QCalendarWidget::NoHorizontalHeader | 0 | 标题已隐藏。 |
QCalendarWidget::SingleLetterDayNames | 1 | 标题显示一个单字母缩写的日期名称(例如,M代表星期一)。 |
QCalendarWidget::ShortDayNames | 2 | 标题显示日期名称的缩写(例如,Mon表示星期一)。 |
QCalendarWidget::LongDayNames | 3 | 标题显示完整的日期名称(例如星期一)。 |
enum SelectionMode
此枚举描述为用户提供的用于在日历中选择日期的选择类型。
Constant | Value | Description |
---|---|---|
QCalendarWidget::NoSelection | 0 | 无法选择日期。 |
QCalendarWidget::SingleSelection | 1 | 可以选择单个日期。 |
enum VerticalHeaderFormat
此枚举类型定义垂直标头可以显示的各种格式。
Constant | Value | Description |
---|---|---|
QCalendarWidget::ISOWeekNumbers | 1 | 标题显示ISO周数,如QDate::weekNumber() 所述。 |
QCalendarWidget::NoVerticalHeader | 0 | 标题已隐藏。 |
属性
-
dateEditAcceptDelay: int 非活动日期编辑在其内容被接受之前显示的时间
如果启用了日历小部件的日期编辑,则此属性指定在最近的用户输入之后日期编辑保持打开的时间量(以毫秒为单位)。一旦这段时间过去,日期编辑中指定的日期被接受,弹出窗口关闭。默认情况下,延迟定义为1500毫秒(1.5秒)。
Access functions:
- int dateEditAcceptDelay() const
- void setDateEditAcceptDelay(int delay)
-
dateEditEnabled: bool 是否启用了日期编辑弹出窗口
如果启用了此属性,如果calendar小部件有焦点,按non-modifier键将导致弹出日期编辑,允许用户以当前区域设置指定的形式指定日期。
默认情况下,此属性是启用的。
日期编辑在外观上比QDateEdit更简单,但允许用户使用左右光标键在字段之间导航,使用向上和向下光标键递增和递减单个字段,并使用数字键直接输入值。
Access functions:
- bool isDateEditEnabled() const
- void setDateEditEnabled(bool enable)
-
firstDayOfWeek: Qt::DayOfWeek 在第一列中显示的日期
默认情况下,显示在第一列中的日期是日历地区每周的第一天。Access functions:
- Qt::DayOfWeek firstDayOfWeek() const
- void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
enum Qt::DayOfWeek
Constant Value Qt::Monday 1 Qt::Tuesday 2 Qt::Wednesday 3 Qt::Thursday 4 Qt::Friday 5 Qt::Saturday 6 Qt::Sunday 7 -
gridVisible: bool 是否显示表格网格
Access functions:
- bool isGridVisible() const
- void setGridVisible(bool show)
-
horizontalHeaderFormat: HorizontalHeaderFormat 此属性保存水平标头的格式
默认值为QCalendarWidget::ShortDayNamesAccess functions:
- QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const
- void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
-
maximumDate: QDate 最大日期
- QDate maximumDate() const
- void setMaximumDate(const QDate &date)
-
minimumDate: QDate 最小日期
- QDate minimumDate() const
- void setMinimumDate(const QDate &date)
-
navigationBarVisible: bool 是否显示导航栏
当此属性为true(默认值)时,下个月、上个月、月选择、年选择控件显示在顶部。
当属性设置为false时,这些控件将被隐藏。- bool isNavigationBarVisible() const
- void setNavigationBarVisible(bool visible)
-
selectedDate: QDate 当前选定的日期
所选日期必须在minimumDate和maximumDate属性指定的日期范围内。默认情况下,所选日期为当前日期。- QDate selectedDate() const
- void setSelectedDate(const QDate &date)
-
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)
公共函数
构造和析构
- QCalendarWidget(QWidget *parent = nullptr)
- virtual ~QCalendarWidget()
属性相关
- int dateEditAcceptDelay() const
- void setDateEditAcceptDelay(int delay)
- bool isDateEditEnabled() const
- void setDateEditEnabled(bool enable)
- Qt::DayOfWeek firstDayOfWeek() const
- void setFirstDayOfWeek(Qt::DayOfWeek dayOfWeek)
- bool isGridVisible() const
- void setGridVisible(bool show)
- QCalendarWidget::HorizontalHeaderFormat horizontalHeaderFormat() const
- void setHorizontalHeaderFormat(QCalendarWidget::HorizontalHeaderFormat format)
- QDate maximumDate() const
- void setMaximumDate(const QDate &date)
- QDate minimumDate() const
- void setMinimumDate(const QDate &date)
- bool isNavigationBarVisible() const
- void setNavigationBarVisible(bool visible)
- QDate selectedDate() const
- void setSelectedDate(const QDate &date)
- QCalendarWidget::SelectionMode selectionMode() const
- void setSelectionMode(QCalendarWidget::SelectionMode mode)
- QCalendarWidget::VerticalHeaderFormat verticalHeaderFormat() const
- void setVerticalHeaderFormat(QCalendarWidget::VerticalHeaderFormat format)
文本格式
- QMap<QDate, QTextCharFormat> dateTextFormat() const
- QTextCharFormat dateTextFormat(const QDate &date) const
- void setDateTextFormat(const QDate &date, const QTextCharFormat &format)
- QTextCharFormat headerTextFormat() const
- void setHeaderTextFormat(const QTextCharFormat &format)
- QTextCharFormat weekdayTextFormat(Qt::DayOfWeek dayOfWeek) const
- void setWeekdayTextFormat(Qt::DayOfWeek dayOfWeek, const QTextCharFormat &format)
年、月
- int monthShown() const
- int yearShown() const
重新的公共函数
- virtual QSize minimumSizeHint() const override
- virtual QSize sizeHint() const override
公共槽
- void setCurrentPage(int year, int month)
- void setDateRange(const QDate &min, const QDate &max)
- void setGridVisible(bool show)
- void setNavigationBarVisible(bool visible)
- void setSelectedDate(const QDate &date)
- void showNextMonth()
- void showNextYear()
- void showPreviousMonth()
- void showPreviousYear()
- void showSelectedDate()
- void showToday()
信号
- void activated(const QDate &date)
- void clicked(const QDate &date)
- void currentPageChanged(int year, int month)
- void selectionChanged()
受保护的函数
- virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
- void updateCell(const 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
相关的演示代码
#include <QtWidgets>
#define WidgetType QCalendarWidget
int i=0,j=0;
QList<WidgetType *> widgetList;
QList<QLabel *> labelList;
QCommonStyle cs;
void addFrame(QGridLayout *mainLayout,QWidget *parent){
WidgetType *widget = new WidgetType(0);
widgetList.append (widget);
QLabel *label = new QLabel(parent);
labelList.append (label);
auto *frame = new QFrame(parent);
frame->setFrameStyle (QFrame::Panel | QFrame::Plain);
auto *vBox = new QVBoxLayout(frame);
vBox->addWidget (label,Qt::AlignCenter);
vBox->addWidget (widget,Qt::AlignCenter);
vBox->setStretch (0,0);
vBox->setStretch (1,1);
mainLayout->addWidget (frame,i,j);
j++;
}
void setLabelText(int i,QString text){
if(i >= labelList.count ()){
return;
}
QLabel *label = labelList.at (i);
label->setText (text);
}
WidgetType* getWidget(int i){
if(i >= widgetList.count ()){
qDebug() << __LINE__ <<"行 getWidget(int i) 函数 变量"<< i << "超出范围";
i = 0; // 超出范围默认使用 0
}
return widgetList.at (i);
}
int main(int argc, char *argv[])
{
QApplication::setStyle (QStyleFactory::create ("fusion")); //windowsvista macintosh fusion
QApplication app(argc,argv);
app.setStyleSheet ("QLabel{background:yellow;"
"color:black;}");
QMetaObject mo = WidgetType::staticMetaObject;
app.setApplicationName (mo.className ());
QDialog w;
w.setWindowFlag (Qt::WindowContextHelpButtonHint,false);
auto *mainLayout = new QGridLayout(&w);
addFrame (mainLayout,&w);
addFrame (mainLayout,&w);
getWidget (0)->setNavigationBarVisible (true);
getWidget (1)->setNavigationBarVisible (false);
setLabelText (0,"setNavigationBarVisible(true)\n" );
setLabelText (1,"setNavigationBarVisible(false)\n" );
w.show ();
app.exec();
return 0;
}