标题:Qt开源作品30-农历控件
作者:liudianwu
日期:2020-06-08 09:07
内容:
## 一、前言
农历控件在国产linux中必备的控件之一,毕竟要适应国人的习惯,你看win10系统的日历,现在点开来直接就有农历在上面,非常方便人性化,所以在很多用Qt做的项目中,也有农历控件的应用场景,而Qt自带的日历控件比较简单,仔细看过源码的人也只知道,其实就是一堆微调框,下拉框,表格组成的,于是打算借用此方法造一个农历控件,本控件的算法是倪大侠提供的,个人测试下来还是没有问题的,造这个农历控件最大的难点是如何根据日期计算农历时间,再加上一些农历的节气之类的,这个网上估计也有很多的算法参考。
**主要功能:**
1. 可设置边框颜色/周末颜色/角标颜色/农历节日颜色
2. 可设置当前月文字颜色/其他月文字颜色/选中日期文字颜色/悬停日期文字颜色
3. 可设置当前月农历文字颜色/其他月农历文字颜色/选中日期农历文字颜色/悬停日期农历文字颜色
4. 可设置当前月背景颜色/其他月背景颜色/选中日期背景颜色/悬停日期背景颜色
5. 可设置三种选中背景模式,矩形背景+圆形背景+图片背景
6. 可直接切换到上一年/下一年/上一月/下一月/转到今天
7. 可设置是否显示农历信息,不显示则当做正常的日历使用
8. 支持1900年-2099年范围
9. 很方便改成多选日期
## 二、代码思路
```c++
void LunarCalendarItem::paintEvent(QPaintEvent *)
{
//绘制准备工作,启用反锯齿
QPainter painter(this);
painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
//绘制背景和边框
drawBg(&painter);
//优先绘制选中状态,其次绘制悬停状态
if (select) {
drawBgCurrent(&painter, selectBgColor);
} else if (hover) {
drawBgCurrent(&painter, hoverBgColor);
}
//绘制日期
drawDay(&painter);
//绘制农历信息
drawLunar(&painter);
}
void LunarCalendarItem::drawBg(QPainter *painter)
{
painter->save();
&nbs ..
#1 [qiu4466 06-08 13:43]