#include "calendarwidget.h"
#include "date.h"
#include "database.h"
#include <QInputDialog>
#include <QPainter>
#include <QStyleOption>
#include <QDateTime>
#include <QPushButton>
#include <QLineEdit>
#include <QGroupBox>
#include <QLabel>
#include <QDate>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QSpacerItem>
#include <QDebug>
#include <QFont>
static const QString s_strWeek[] = {
QObject::tr("周日"), QObject::tr("周一"), QObject::tr("周二"),
QObject::tr("周三"), QObject::tr("周四"), QObject::tr("周五"),
QObject::tr("周六"),
};
CalendarWidget::CalendarWidget(QWidget *parent)
: QWidget(parent), m_nMonth(1)
{
// 获取当前年月日
m_nYear = QDate::currentDate().year();
m_nMonth = QDate::currentDate().month();
m_nDay = QDate::currentDate().day();
initWidget();
initDate();
}
CalendarWidget::~CalendarWidget()
{
}
int CalendarWidget::year() const
{
return m_nYear;
}
void CalendarWidget::setYear(int nYear)
{
m_nYear = nYear;
}
int CalendarWidget::month() const
{
return m_nMonth;
}
void CalendarWidget::setMonth(int nMonth)
{
m_nMonth = nMonth;
}
int CalendarWidget::day() const
{
return m_nDay;
}
void CalendarWidget::setDay(int nDay)
{
m_nDay = nDay;
}
void CalendarWidget::jumpTodate(int year, int month, int day)
{
setYear(year);
setMonth(month);
setDay(day);
initDate();
}
/**
* @brief CalendarWidget::initWidget 初始化界面
*/
void CalendarWidget::initWidget()
{
this->setMinimumSize(427, 350);
this->setObjectName("widgetCalendar");
verLayoutCalendar = new QVBoxLayout(this);
verLayoutCalendar->setContentsMargins(2, 2, 2, 2);
verLayoutCalendar->setSpacing(0);
//! [2]
widgetTitle = new QWidget(this);
widgetTitle->setObjectName("widgetTitle");
widgetTitle->setMinimumHeight(20);
btnPrevMonth = new QPushButton(widgetTitle);
btnPrevMonth->setText(tr("上月"));
labelTitle = new QLabel(widgetTitle);
labelTitle->setAlignment(Qt::AlignCenter);
labelTitle->setObjectName("labelTitle");
labelTitle->setText(QDateTime::currentDateTime()
.toString("yyyy 年 MM 月 "));
btnNextMonth = new QPushButton(widgetTitle);
btnNextMonth->setText(tr("下月"));
horLayoutTitle = new QHBoxLayout(widgetTitle);
horLayoutTitle->addWidget(btnPrevMonth);
horLayoutTitle->addWidget(labelTitle, 1);
horLayoutTitle->addWidget(btnNextMonth);
verLayoutCalendar->addWidget(widgetTitle);
connect(btnPrevMonth, SIGNAL(clicked(bool)), this, SLOT(sltShowPrevMonth()));
connect(btnNextMonth, SIGNAL(clicked(bool)), this, SLOT(sltShowNextMonth()));
//! [2]
//! [3]
widgetWeek = new QWidget(this);
widgetWeek->setObjectName("widgetWeek");
horLayoutWeek = new QHBoxLayout(widgetWeek);
horLayoutWeek->setContentsMargins(0, 0, 0, 0);
horLayoutWeek->setSpacing(0);
for (int i = 0; i < Week; i++) {
labelWeek[i] = new QLabel(widgetWeek);
labelWeek[i]->setText(s_strWeek[i]);
labelWeek[i]->setObjectName("labelWeek");
labelWeek[i]->setMinimumHeight(30);
labelWeek[i]->setAlignment(Qt::AlignCenter);
if ((0 == (i % 7)) || (6 == (i% 7))) {
labelWeek[i]->setProperty("weekend", true);
}
horLayoutWeek->addWidget(labelWeek[i]);
}
verLayoutCalendar->addWidget(widgetWeek);
//! [3]
//! [4]
widgetBody = new QWidget(this);
verLayoutCalendar->addWidget(widgetBody, 1);
gridLayoutBody = new QGridLayout(widgetBody);
gridLayoutBody->setHorizontalSpacing(0);
gridLayoutBody->setVerticalSpacing(0);
gridLayoutBody->setContentsMargins(0, 0, 0, 0);
for (int i = 0; i < 42; i++) {
labelDay[i] = new DayLabel(widgetBody);
labelDay[i]->setObjectName("labelDay");
labelDay[i]->setAlignment(Qt::AlignCenter);
labelDay[i]->setText(QString::number(i));
if ((0 == (i % 7)) || (6 == (i% 7))) {
labelDay[i]->setProperty("weekend", true);
}
gridLayoutBody->addWidget(labelDay[i], i / 7, i % 7);
connect(labelDay[i], SIGNAL(signalClicked(int,int)), this, SLOT(sltDayClicked(int,int)));
connect(labelDay[i], SIGNAL(signalPlan(QString)), this, SIGNAL(signalPlan(QString)));
}
//! [4]
}
/**
* @brief CalendarWidget::initDate 初始化日期
*/
void CalendarWidget::initDate()
{
// 首先判断当前月的第一天是星期几
int nWeek = Date::getFirstDayOfWeek(m_nYear, m_nMonth);
int nMonthDays = Date::getMonthDays(m_nYear, m_nMonth);
// 上月天数
int nPreMonDays = Date::getMonthDays(1 == m_nMonth ? m_nYear - 1 : m_nYear, 1 == m_nMonth ? 12 : m_nMonth - 1);
// 显示当前年月
labelTitle->setText(tr("%1 年 %2 月")
.arg(m_nYear, 2, 10, QChar('0'))
.arg(m_nMonth, 2, 10, QChar('0')));
// 显示上月剩余天数
if (0 == nWeek) {
// 显示上月天数
for (int i = 0; i < 7; i++) {
labelDay[i]->showDay((nPreMonDays - 7 + i + 1), "");
labelDay[i]->setColor(PREV_MONTH_DAY);
}
// 显示下月天数
for (int i = 0; i < (42 - nMonthDays - 7); i++) {
labelDay[nMonthDays + 7 + i]->showDay((i + 1), "");
labelDay[nMonthDays + 7 + i]->setColor(NEXT_MONTH_DAY);
}
}
else {
for (int i = 0; i < nWeek; i++) {
labelDay[i]->showDay((nPreMonDays - nWeek + i + 1), "");
labelDay[i]->setColor(PREV_MONTH_DAY);
}
// 显示下月天数
for (int i = (nWeek + nMonthDays); i < 42; i++) {
labelDay[i]->showDay((i - (nWeek + nMonthDays) + 1), "");
labelDay[i]->setColor(NEXT_MONTH_DAY);
}
}
// 显示当前月
int nProperty = 1;
QStringList strPlan;
int index = 0;
for (int i = nWeek; i < (nMonthDays + nWeek); i++) {
index = 0 == nWeek ? (i + 7) : i;
labelDay[index]->showDay(i - nWeek + 1, Date::getLunarDate(m_nYear, m_nMonth, i - nWeek + 1));
nProperty = ((0 == (i % 7)) || (6 == (i% 7))) ? WEEKEND_DAY : CURR_MONTH_DAY;
labelDay[index]->setColor(nProperty);
// 显示计划
strPlan = DataBase::selectDb(
QString("%1-%2-%3")
.arg(m_nYear, 4, 10, QChar('0'))
.arg(m_nMonth, 2, 10, QChar('0'))
.arg(i - nWeek + 1, 2, 10, QChar('0')));
labelDay[index]->setPlan(strPlan);
}
// 显示当前天数
if(0==nWeek)
labelDay[m_nDay + nWeek +6]->setColor(CURRENT_DAY);
else
labelDay[m_nDay + nWeek - 1]->setColor(CURRENT_DAY);
// 发送更新信号
Q_EMIT signalDayChanged();
}
/**
* @brief CalendarWidget::sltDayClicked 点击响应
* @param type 类型 0 表示上月 1表示下月
* @param day 当前点击的天数
*/
void CalendarWidget::sltDayClicked(int type, int day)
{
// 上月
if (PREV_MONTH_DAY == type) {
sltShowPrevMonth();
}
// 下月
else if (NEXT_MONTH_DAY == type) {
sltShowNextMonth();
}
// 当天/周末/当月天数都显示在右边,并转换成农历
else if ((CURR_MONTH_DAY == type)
|| (WEEKEND_DAY == type)
|| (CURRENT_DAY == type)) {
// 选中当天
Q_EMIT signalDayClicked(day);
}
}
/**
* @brief CalendarWidget::sltShowPrevMonth 显示上月日期
*/
void CalendarWidget::sltShowPrevMonth()
{
m_nMonth--;
if (m_nMonth < 1) {
m_nMonth = 12;
m_nYear--;
}
initDate();
}
/**
* @brief CalendarWidget::sltShowNextMonth 显示下月日期
*/
void CalendarWidget::sltShowNextMonth()
{
m_nMonth++;
if (m_nMonth > 12) {
m_nMonth = 1;
m_nYear++;
}
initDate();
}
//////////////////////////////////////
/// \brief DayLabel::DayLabel
/// \param par
没有合适的资源?快使用搜索试试~ 我知道了~
QT实现万年历
共106个文件
0:21个
1:17个
6:11个
需积分: 49 59 下载量 78 浏览量
2018-07-18
23:19:48
上传
评论 14
收藏 29.78MB RAR 举报
温馨提示
QT实现万年历,有新历,旧历,节气,新旧历节日,可以添加日程,可以任意跳转日期
资源推荐
资源详情
资源评论
收起资源包目录
QT实现万年历 (106个子文件)
libglib-2.0.so.0 1.06MB
libsystemd.so.0 524KB
libharfbuzz.so.0 375KB
libxkbcommon.so.0 250KB
libglapi.so.0 182KB
libpng12.so.0 146KB
libpthread.so.0 135KB
libxcb-glx.so.0 98KB
libgpg-error.so.0 79KB
libxcb-randr.so.0 54KB
libxcb-render.so.0 38KB
libxkbcommon-x11.so.0 31KB
libxcb-xfixes.so.0 30KB
libxcb-dri2.so.0 18KB
libxcb-image.so.0 18KB
libxcb-render-util.so.0 14KB
libxcb-shm.so.0 14KB
libxcb-shape.so.0 14KB
libxcb-dri3.so.0 10KB
libxcb-present.so.0 10KB
libgthread-2.0.so.0 6KB
libGL.so.1 453KB
libfontconfig.so.1 267KB
libexpat.so.1 162KB
libxcb.so.1 135KB
libselinux.so.1 127KB
libxcb-xkb.so.1 106KB
libz.so.1 102KB
libgcc_s.so.1 88KB
librt.so.1 31KB
libxcb-sync.so.1 26KB
libXxf86vm.so.1 22KB
libxcb-util.so.1 22KB
libuuid.so.1 19KB
libxshmfence.so.1 10KB
libXdamage.so.1 10KB
libxcb-keysyms.so.1 10KB
libX11-xcb.so.1 6KB
ld-linux-x86-64.so.2 159KB
libdrm.so.2 67KB
libdl.so.2 14KB
libgcrypt.so.20 898KB
libpcre.so.3 446KB
libpcre16.so.3 406KB
libdbus-1.so.3 302KB
libgraphite2.so.3 150KB
libXfixes.so.3 22KB
libxcb-icccm.so.4 18KB
libQt5Widgets.so.5 6.19MB
libQt5Gui.so.5 5.66MB
libQt5Core.so.5 5.21MB
libQt5XcbQpa.so.5 926KB
libQt5DBus.so.5 498KB
libQt5Sql.so.5 283KB
liblzma.so.5 134KB
libicudata.so.55 24.71MB
libicui18n.so.55 2.38MB
libicuuc.so.55 1.56MB
libicudata.so.56 23.89MB
libicui18n.so.56 3.21MB
libicuuc.so.56 1.97MB
libc.so.6 1.78MB
libstdc++.so.6 1.49MB
libX11.so.6 1.23MB
libm.so.6 1.04MB
libfreetype.so.6 679KB
libICE.so.6 92KB
libXext.so.6 72KB
libXi.so.6 62KB
libSM.so.6 30KB
libXdmcp.so.6 22KB
libXau.so.6 14KB
calendar 1.5MB
calendarwidget.cpp 21KB
date.cpp 21KB
moc_calendarwidget.cpp 13KB
moc_database.cpp 3KB
moc_date.cpp 2KB
database.cpp 1KB
main.cpp 401B
myPlan.db 12KB
moc_predefs.h 9KB
calendarwidget.h 4KB
date.h 845B
database.h 345B
Makefile 76KB
main.o 792KB
database.o 692KB
calendarwidget.o 684KB
moc_calendarwidget.o 678KB
date.o 527KB
moc_date.o 471KB
moc_database.o 470KB
calendar.pro 1KB
calendar.sh 248B
copylib.sh 211B
copylib.sh 211B
libqlinuxfb.so 382KB
libqvnc.so 213KB
libqminimalegl.so 165KB
共 106 条
- 1
- 2
资源评论
Allllll0235
- 粉丝: 0
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功