资源简介
利用QLabel和日历算法:蔡勒(Zeller)公式自己写了一个可以选中多个日期的日历控件
代码片段和文件信息
#include “calendarex.h“
#include “ui_calendarex.h“
#include
#include
CalendarEx::CalendarEx(QWidget *parent) :
QWidget(parent)
ui(new Ui::CalendarEx)
{
ui->setupUi(this);
// 将控件指针放入list中
putDayExInList();
initCalendarProperty();// 初始化每个日期都没有被选中,index为响应的index
setCurYearMonth(1 1 1);
connectMouseClickSlot();// 给每一天连接槽函数
QFile styleFile(“:/img/style.qss“);
styleFile.open(QIODevice::ReadOnly);
QString strstyle(styleFile.readAll());;
setstyleSheet(strstyle);
}
CalendarEx::~CalendarEx()
{
delete ui;
}
void CalendarEx::putDayExInList()
{
QList ds = this->findChildren();
int length = ds.length();
for(int i = 0; i < length; i ++)
{
listDayEx.append(ds[i]);
}
}
void CalendarEx::initCalendarProperty()
{
int nCnt = listDayEx.length();
for(int i = 0; i < nCnt; i ++)
{
listDayEx[i]->setSelected(false);
listDayEx[i]->setIndex(i);
}
}
void CalendarEx::setCurrentDateTime(int nYear int nMonth int nDay)
{
setCurYearMonth(nYear nMonth nDay);
initCalendarProperty();
QDate d;
QDate dCurMonthFirstDay(nYear nMonth 1);
// 计算这个月一号是星期几以及这个月有多少天
int nDayOfWeek = dg.getDayOfWeek(nYear nMonth 1);
int nDaysOfMonth = dg.getDaysOfMonth(nYear nMonth);
if(nDayOfWeek == 0)
nDayOfWeek = 7;
// 恢复颜色
int nCnt = listDayEx.length();
for(int i = 0; i < nCnt; i ++)
{
listDayEx[i]->setSelected(false);
}
// 填充当前月一号之前的日期控件
for(int i = 0; i < nDayOfWeek; i ++)
{
QDate dTemp = dCurMonthFirstDay.addDays(-1*(nDayOfWeek - i));
listDayEx[i]->setDay(dTemp.day());
listDayEx[i]->setMonType(-1);
listDayEx[i]->setSelected(false);
listDayEx[i]->setHint(QString(“上个月“));
}
// 填充这个月的
for(int i = 0; i < nDaysOfMonth; i ++)
{
listDayEx[i+nDayOfWeek]->setDay(i+1);
listDayEx[i+nDayOfWeek]->setMonType(0);
listDayEx[i+nDayOfWeek]->setSelected(false);
listDayEx[i+nDayOfWeek]->setHint(QString(“未选择“));
}
// 填充下个月的日期控件
QDate dNextMonthFirstDay = dCurMonthFirstDay.addMonths(1);
for(int i = nDayOfWeek + nDaysOfMonth; i < nCnt; i ++)
{
listDayEx[i]->setDay(i-nDayOfWeek - nDaysOfMonth + 1);
listDayEx[i]->setMonType(1);
listDayEx[i]->setSelected(false);
listDayEx[i]->setHint(QString(“下个月“));
}
// 设置上方的标题
setYearMonthLabelHint();
// 设置左边
setCalendarHint();
updateCtrlstyle();
}
void CalendarEx::setLabText(QLabel *pLabel const QString &strText)
{
pLabel->setText(strText);
}
void CalendarEx::setYearMonthLabelHint()
{
setLabText(ui->lab_YearMonthHint QString(“%1 年 %2 月“).arg(nCurYear).arg(nCurMonth));
}
void CalendarEx::setCurYearMonth(int nYear int nMonth int nDay)
{
nCurMonth = nMonth;
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-12-15 15:26 CalendarExTest\
文件 6430 2016-12-15 15:25 CalendarExTest\calendarex.cpp
文件 1424 2016-12-15 15:18 CalendarExTest\calendarex.h
文件 15618 2016-12-13 14:54 CalendarExTest\calendarex.ui
文件 553 2016-12-15 14:03 CalendarExTest\CalendarExTest.pro
文件 23608 2016-12-15 15:26 CalendarExTest\CalendarExTest.pro.user
文件 919 2016-12-13 11:08 CalendarExTest\datealg.cpp
文件 225 2016-12-13 11:00 CalendarExTest\datealg.h
文件 1494 2016-12-15 14:19 CalendarExTest\dayex.cpp
文件 1058 2016-12-15 15:11 CalendarExTest\dayex.h
文件 1422 2016-12-13 11:33 CalendarExTest\dayex.ui
文件 311 2016-12-15 15:22 CalendarExTest\dialog.cpp
文件 273 2016-12-13 10:41 CalendarExTest\dialog.h
文件 869 2016-12-13 14:27 CalendarExTest\dialog.ui
目录 0 2016-12-15 15:26 CalendarExTest\img\
文件 97 2016-12-15 14:04 CalendarExTest\img.qrc
文件 612 2016-12-15 15:02 CalendarExTest\img\st
文件 365 2016-12-14 16:06 CalendarExTest\main.cpp
- 上一篇:QML界面小
- 下一篇:利用汇编语言实现家用风扇控制器
评论
共有 条评论