android日期选择区间控件_自定义日历(四)-区间选择控件

一、概述

很早很早以前,写过几篇关于日历的文章,不同于Qt原生的控件,这些控件都是博主使用自绘的方式进行完成,因此可定制性更强一些,感兴趣的可以参考自定义日历(一)、自定义日历(二)和自定义日历(三))。

本篇文章还是继续来写我们的日历控件,仍然采用自绘的方式,带来更加炫酷的效果。看本文的标题就应该就能明白,这次实现的是一个可以区间选择的日历控件。

二、效果展示

效果图如下,一个简单的效果展示。

日历控件与Qt原生的QDateEdit一样,是由一个按钮进行触发,弹出如期选择面板。不同的是这个日历选择面板由2个小的日期面板组成,分别是开始和结束日期,规则如下:

开始日期必须小于结束日期

顶部有快速返回按钮

选中的日期段上有高亮背景色

选中的日期点上有蓝色圆形标识

点击确定按钮以后日期选择面板关闭

三、整体结构

开始讲解具体内容之前,先来看下整体的结构划分,实现这个日期段选择控件,总共需要以下4个类,下图是工程结构

以下是4个类的说明

QDateContent:单个日历窗口

QDateWidget:包含了年月选择的单个日历窗口

QDatePanel:日期段选择面板

QPickDate:日期选择按钮,用于呼出日期选择面板

其中QPickDate类就是对外使用的类,使用也很简单,可能像下面这样

QPickDate * pickDate = new QPickDate;

pickDate->SetQuickValue(QDatePanel::DAY_ONE);

意思是构造一个日期段选择空间,然后初始时为选择当天。有了一个大致的了解后,下面开始详细的讲解每个类的实现过程

四、分析实现

1、QPickDate

QPickDate类是对外导出类,也是我们使用的时候需要了解的类,他的头文件实现如下

class QPickDate : public QPushButton

{

Q_OBJECT

public:

QPickDate(QWidget * parent = nullptr);

~QPickDate();

signals:

void PickSuccess();//选择日期成功时调用

public:

void SetQuickValue(QDatePanel::QuickPick pick);

void GetStartDate(unsigned short year, unsigned short month, unsigned short day);

void GetEndDate(unsigned short year, unsigned short month, unsigned short day);

private slots:

void OnClicked();

private:

void InitializeUI();

private:

QDatePanel::QuickPick m_ePick = QDatePanel::DAY_CUSTOM;

QDatePanel * m_pPanel = nullptr;

};

接口看起来也比较简单,SetQuickValue接口上一小节使用过,主要是用来初始化日期控件状态。GetStartDate和GetEndDate接口主要就是获取日期段的开始时间和结束时间。其中的实现具体的日期数据是从成员变量QDateP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值