QCalendarWidget获取当前页的开始日期和结束日期

在工作的时候遇到了这么一个问题,需要获取Qt日历当前页中的开始日期和结束日期,来进行文件的查询并显示哪天有,哪天没有的这么一个功能,如下图:
QCalendarWidget获取当前页的开始日期和结束日期_第1张图片
参考链接:https://blog.csdn.net/nigoole/article/details/51320239

思路参考:日历中总共有6x7=42格日期,但是最多是第一行中全部为上个月的日期,第二行不会出现有上个月的日期,第一行也不会全是本月的日期(这里我专门验证了一下,反正是2000~2100年也没有出现过),这个是非常重要的条件,然后获取到当前月份的1号是周几(用nWeek表示),以周日为第一天,周六为第七天,用0~6表示,通过nWeek与日历的关系,我推算得到以下关系:

周日:0 如果1号为周日,那在上述所说的条件下,1号前面还有6天是上个月的日期
周一:1 如果1号为周一,那在上述所说的条件下,1号前面还有7天是上个月的日期
周二:2 如果1号为周二,那在上述所说的条件下,1号前面还有1天是上个月的日期
周三:3 如果1号为周三,那在上述所说的条件下,1号前面还有2天是上个月的日期
周四:4 如果1号为周四,那在上述所说的条件下,1号前面还有3天是上个月的日期
周五:5 如果1号为周五,那在上述所说的条件下,1号前面还有4天是上个月的日期
周六:6 如果1号为周六,那在上述所说的条件下,1号前面还有5天是上个月的日期

下面上代码:
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include 

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    int getFirstDayOfWeek(int year, int month);
    int getTotalMonthDays(int year, int month);
    bool isLoopYear(int year);
private slots:
    void on_calendarWidget_currentPageChanged(int year, int month);

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include 
#include 
#include 
#include 
#include 

#define Time_Hours 24		//1天24小时
#define Time_Seconds 3600	//1小时3600秒
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    connect(ui->calendarWidget,SIGNAL(currentPageChanged(int,int)),this,SLOT(GetMaxMinDate(int,int)));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_calendarWidget_currentPageChanged(int year, int month)
{
    // 首先判断当前月的第一天是星期几
    int nWeek = getFirstDayOfWeek(year,month);

    QDate date_end;
    int nDays = -1;
    QDate date_start = QDate(year,month,1);
    QDateTime qDateTime = QDateTime(date_start);
    uint unCurTimeStamp = qDateTime.toTime_t();
    switch(nWeek)
    {
    case 0:
    {
        nDays = 6;//周日
        break;
    }
    case 1:
    {
        nDays = 7;//周一
        break;
    }
    case 2:
    {
        nDays = 1;//周二
        break;
    }
    case 3:
    {
        nDays = 2;//周三
        break;
    }
    case 4:
    {
        nDays = 3;//周四
        break;
    }
    case 5:
    {
        nDays = 4;//周五
        break;
    }
    case 6:
    {
        nDays = 5;//周六
        break;
    }
    default:
        break;
    }

    //开始时间戳
    uint unStartTimeStamp = unCurTimeStamp - nDays * Time_Hours * Time_Seconds;
    //结束时间戳
    uint unEndTimeStamp = unStartTimeStamp + 41 * Time_Hours * Time_Seconds;

    //通过时间戳来转换成日期
    QDateTime qDateTime1 = QDateTime::fromTime_t(unStartTimeStamp);
    QDateTime qDateTime2 = QDateTime::fromTime_t(unEndTimeStamp);

    date_start = qDateTime1.date();
    date_end = qDateTime2.date();

    qDebug()<<"date_start: "<

 

你可能感兴趣的:(VS-Qt工作总结)