Qt之显示控件(QCalendarWidget)

简述

QCalendarWidget类提供了基于月份的日历小部件,允许用户选择日期。

该小部件已使用系统当前的月份和年份进行了初始化,同时QCalendarWidget提供了几个公共插槽以更改显示的年份和月份。

功能详述

默认情况下,选择今天的日期,并且用户可以使用鼠标和键盘选择日期。可以使用selectedDate()函数检索当前选择的日期。通过设置minimumDate和maximumDate属性,可以将用户选择限制在给定的日期范围内。或者,可以使用setDateRange()槽函数一次性设置两个属性。将selectionMode属性设置为NoSelection可以完全禁止用户选择。请注意,还可以使用setSelectedDate()插槽以编程方式选择日期。

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

新创建的日历窗口小部件使用缩写的日期名称,并且星期六和星期日都标记为红色。默认日历网格不可见。将显示星期数。第一列日期是日历语言环境的一周的第一天。

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

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

QCalendarWidget类还提供了三个信号:selectionChanged(),activated()和currentPageChanged();从而可以响应用户交互。

通过将QTextCharFormat设置为某些特殊的工作日,特殊的日期或用于标题的呈现,可以很大程度上自定义标题,工作日或单日的呈现。

日历窗口小部件仅使用QTextCharFormat中的属性的子集。当前,前景,背景和字体属性用于确定小部件中各个单元的呈现。

使用

效果

源码

    label = new QLabel;
    label->setAlignment(Qt::AlignCenter);

    QCalendarWidget *calendar = new QCalendarWidget;
    calendar->setGridVisible(true);
    calendar->setFirstDayOfWeek(Qt::Tuesday);

    QGridLayout *gridLayout = new QGridLayout;
    gridLayout->addWidget(calendar);
    gridLayout->addWidget(label);

    this->setLayout(gridLayout);

    connect(calendar, &QCalendarWidget::clicked, [&](QDate date){
        label->setText(date.toString("yyyy年 MM月 dd日 dddd"));
    });

常用设置

日期范围

通过设置日期范围,让用户只能选择这个范围内的日期。方法如下

  QDate min, max;
  min.setDate(1988, 10, 1);
  max.setDate(2100, 12, 1);
  QCalendarWidget *calendar;

  calendar->setDateRange(min, max);

设置第一列

默认情况下,第一列的值是当地一周的第一天,我们可以通过setFirstDayOfWeek来设置,方法如下

setFirstDayOfWeek(Qt::Monday)//Qt::Tuesday;Qt::Wednesday;Qt::Thursday;...

效果

设置网格与导航栏可见性

设置方法如下

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

效果

水平头部与垂直头部设置

设置方法如下

    calendar->setHorizontalHeaderFormat(QCalendarWidget::LongDayNames);
    calendar->setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);

效果

枚举:QCalendarWidget::HorizontalHeaderFormat

常量描述
QCalendarWidget::SingleLetterDayNames1标题显示日期名称的单字母缩写(例如,星期一为M)。
QCalendarWidget::ShortDayNames2标题显示日期名称的简短缩写(例如,星期一为星期一)。
QCalendarWidget::LongDayNames3标头显示完整的日期名称(例如星期一)。
QCalendarWidget::NoHorizontalHeader0标题被隐藏。

枚举:QCalendarWidget::VerticalHeaderFormat

常量描述
QCalendarWidget::ISOWeekNumbers1标题显示ISO周编号,如QDate :: weekNumber()所述。
QCalendarWidget::NoVerticalHeader0标题被隐藏。

总结

通过上面的介绍,我们对QCalendarWidget的基本用法有了初步了解,后面可以根据自己的需要利用QTextCharFormat进行样式的开发。

引用

[1] Qt助手

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值