继承QWidget
日历控件,长这样
面这个是它的区域划分情况
目录
1.5.1 选中指定日期 setSelectedDate(QDate date)
2.2.2 获取一周的第一天 firstDayOfWeek()
1 基本操作
1.1 构造函数
默认为当天日期
1.2 日期范围
- setMinimumDate(QDate date) 设置最小日期
- minimumDate() -> QDate 获取最小日期
- setMaximumDate(QDate date) 设置最大日期
- maximumDate() -> QDate 获取最大日期
- setDateRange(QDate min, QDate max) 设置日期区间
由于比较简单,我们举一个例子
设置最小日期为今天(2021,5,28),最大日期为两年后的今天(2023,5,28)
此时我点下箭头就点不了了
此时我点上箭头就点不了了
1.3 日期编辑
1.3.1 编辑状态
运行后我们直接按下数字1920
会出现中间一个灰色的框子,输入之后会跳转到那个日期
这个状态是可编辑状态
1.3.1.1 获取 isDataEditEnabled()
默认是可编辑的
1.3.1.2 设置 setDateEditEnabled()
我们现在设置为不可编辑状态
经测试,现在再直接输入就没有用了
1.3.1.3 设置延时编辑时间 setDateEditAcceptDelay()
这个就是设置中间灰色框子停留的时间
我们现在设置为2秒
参数的单位是ms
发现输入完之后停了2s才跳转过去
1.3.1.4 获取延时编辑时间 dateEditAcceptDelay()
1.4 日期获取
- monthShown() -> int 获取月
- yearShown() -> int 获取年
- selectedDate() -> QDate 获取QDate
我就把这三个放在一起展示了
1.5 选中
1.5.1 选中指定日期 setSelectedDate(QDate date)
我们现在选择2021,5,31
1.5.2 选中模式
下面两个方法设计到一个参数,名为 QCalendarWidget.SelectionMode,有两个值可以选择
- 0 - QCalendarWidget.NoSelection 无法选择日期
- 1 - QCalendarWidget.SingleSelection 可以选择单个日期
默认是可以选择单个日期的
当我点击别的日期时,可移动选择区域
1.5.2.2 设置 setSelectionMode(QCalendarWidget.SelectionMode mode)
当我点击别的日期时不可移动选中区域
1.6 展示日期
- showToday 展示今天
- showSelectedDate() 展示选中的日期
- showNextYear() 展示明年
- showPreviousYear() 展示去年
- showNextMonth() 展示下一个月
- showPreviousMonth() 展示上一个月
- setCurrentPange(int year,int month) 展示指定的年月那一页
如果不进行展示设置,默认是展示选中的日期的那一页
我们现在选中一个日期,然后展示当天
会展示当天的那一页,此时是2021.5.29日
现在选中一个日期然后展示明年
这里的明年是指选中时间的明年
其他的就不展示了
2 格式外观
2.1 导航条
2.1.1 查看有无导航条 isNavigationBarVisible()
默认是有导航条的
2.1.2 设置有无导航条 setNavigationBarVisible()
我们现在设置为无导航条
2.2 一周的第一天
2.2.1 设置 setFirstDayOfWeek()
它这个参数名称叫 Qt.DayOfWeek
实际上写1-7的枚举值就可以了
我们设置周2为每周的第一天
2.2.2 获取一周的第一天 firstDayOfWeek()
2.2.3 网格显示
2.2.3.1 获取 isGridVisible()
默认情况下是不显示的
2.2.3.2 设置 setGridVisible()
我们现在给它设置为显示
2.3 文本格式
下面的函数大多有一个QTextCharFormat作为参数,我们首先创建一个QTextCharFormat对象
2.3.1 头部文本字符格式
2.3.1.1 设置 setHeaderTextFormat()
2.3.1.2 获取 headerTextFormat()
2.3.2 水平头部文本字符格式
2.3.2.1 设置 setHorizontalHeaderFormat()
这个函数传入的参数为 QCalendarWidget.HorizontalHeaderFormat
- QCalendarWidget.SingleLetterDayNames 单字日期表示
- QCalendarWidget.ShortDayNames 简称日期表示
- QCalendarWidget.LongDayNames 全称日期表示
- QCalendarWidget.NoHorizontalHeader 不表示
下面四个例子用win10中文系统展示
QCalendarWidget.SingleLetterDayNames
QCalendarWidget.ShortDayNames
QCalendarWidget.LongDayNames
控件的宽度有明显增加
QCalendarWidget.NoHorizontalHeader
2.3.2.2 获取 horizontalHeaderFormat()
2.3.3 竖直头部文本格式
下面方法中涉及一个参数名称为 QCalendarWidget.VerticalHeaderFormat
- 0 - QCalendarWidget.NoVerticalHeader 不显示
- 1 - QCalendarWidget.ISOWeekNumbers 显示
2.3.3.1 获取 verticalHeaderFormat()
默认情况下是显示的
2.3.3.2 设置 setVerticalHeaderFormat()
我们现在取消垂直头部
2.3.4 指定星期几的文本
2.3.4.1 设置 setWeekdayTextFormat()
我们现在将周一设置为tcf(华文彩云)格式
2.3.4.2 获取指定星期几的格式
我们现在获取星期一的格式
2.3.5 指定日期格式
2.3.5.1 设置 setDateTextFormat()
我们设置当天的日期为华文彩云格式
我移动了一下,然后给当天日期圈起来了
2.3.5.2 获取 dateTextFormat()
有两种参数传入的方法
第一种:什么参数也不加
会返回一个字典,键为QDate,值为QTextCharFormat
第二种:加上日期
会返回 QTextCharFormat
3 信号
我们连四个函数去测试一下
初始状态是这个样子的
我们现在点6月18日
我们现在双击6月18日
选中6月18日后再按一下回车
我们点一下向右箭头进行翻页
- 点击日期的信号:如果点击了超出范围的日期,不会触发该信号
- 选择改变信号:如果用代码进行改变,也会触发该信号