#ifndef LUNARCALENDARWIDGET_H #define LUNARCALENDARWIDGET_H /** * 自定义农历控件 作者:倪大侠 整理:feiyangqingyun(QQ:517216493) 2017-11-17 * 1. 可设置边框颜色、周末颜色、角标颜色、农历节日颜色。 * 2. 可设置当前月文字颜色、其他月文字颜色、选中日期文字颜色、悬停日期文字颜色。 * 3. 可设置当前月农历文字颜色、其他月农历文字颜色、选中日期农历文字颜色、悬停日期农历文字颜色。 * 4. 可设置当前月背景颜色、其他月背景颜色、选中日期背景颜色、悬停日期背景颜色。 * 5. 可设置三种选中背景模式,矩形背景、圆形背景、图片背景。 * 6. 可直接切换到上一年、下一年、上一月、下一月、转到今天。 * 7. 可设置是否显示农历信息,不显示则当做正常的日历使用。 * 8. 支持1901年-2099年范围。 * 9. 很方便改成多选日期。 */ #include #include #include "lunarcalendarinfo.h" #include "lunarcalendaritem.h" class QLabel; class QComboBox; class LunarCalendarItem; #ifdef quc class Q_DECL_EXPORT LunarCalendarWidget : public QWidget #else class LunarCalendarWidget : public QWidget #endif { Q_OBJECT Q_ENUMS(CalendarStyle) Q_ENUMS(WeekNameFormat) Q_ENUMS(SelectType) Q_PROPERTY(CalendarStyle calendarStyle READ getCalendarStyle WRITE setCalendarStyle) Q_PROPERTY(WeekNameFormat weekNameFormat READ getWeekNameFormat WRITE setWeekNameFormat) Q_PROPERTY(QDate date READ getDate WRITE setDate) Q_PROPERTY(QColor weekTextColor READ getWeekTextColor WRITE setWeekTextColor) Q_PROPERTY(QColor weekBgColor READ getWeekBgColor WRITE setWeekBgColor) Q_PROPERTY(bool showLunar READ getShowLunar WRITE setShowLunar) Q_PROPERTY(QString bgImage READ getBgImage WRITE setBgImage) Q_PROPERTY(SelectType selectType READ getSelectType WRITE setSelectType) Q_PROPERTY(QColor borderColor READ getBorderColor WRITE setBorderColor) Q_PROPERTY(QColor weekColor READ getWeekColor WRITE setWeekColor) Q_PROPERTY(QColor superColor READ getSuperColor WRITE setSuperColor) Q_PROPERTY(QColor lunarColor READ getLunarColor WRITE setLunarColor) Q_PROPERTY(QColor currentTextColor READ getCurrentTextColor WRITE setCurrentTextColor) Q_PROPERTY(QColor otherTextColor READ getOtherTextColor WRITE setOtherTextColor) Q_PROPERTY(QColor selectTextColor READ getSelectTextColor WRITE setSelectTextColor) Q_PROPERTY(QColor hoverTextColor READ getHoverTextColor WRITE setHoverTextColor) Q_PROPERTY(QColor currentLunarColor READ getCurrentLunarColor WRITE setCurrentLunarColor) Q_PROPERTY(QColor otherLunarColor READ getOtherLunarColor WRITE setOtherLunarColor) Q_PROPERTY(QColor selectLunarColor READ getSelectLunarColor WRITE setSelectLunarColor) Q_PROPERTY(QColor hoverLunarColor READ getHoverLunarColor WRITE setHoverLunarColor) Q_PROPERTY(QColor currentBgColor READ getCurrentBgColor WRITE setCurrentBgColor) Q_PROPERTY(QColor otherBgColor READ getOtherBgColor WRITE setOtherBgColor) Q_PROPERTY(QColor selectBgColor READ getSelectBgColor WRITE setSelectBgColor) Q_PROPERTY(QColor hoverBgColor READ getHoverBgColor WRITE setHoverBgColor) public: enum CalendarStyle { CalendarStyle_Red = 0 }; enum WeekNameFormat { WeekNameFormat_Short = 0, //短名称 WeekNameFormat_Normal = 1, //普通名称 WeekNameFormat_Long = 2, //长名称 WeekNameFormat_En = 3 //英文名称 }; enum SelectType { SelectType_Rect = 0, //矩形背景 SelectType_Circle = 1, //圆形背景 SelectType_Triangle = 2, //带三角标 SelectType_Image = 3 //图片背景 }; explicit LunarCalendarWidget(QWidget *parent = 0); ~LunarCalendarWidget(); private: QFont iconFont; //图形字体 bool btnClick; //按钮单击,避开下拉选择重复触发 QComboBox *cboxYear; //年份下拉框 QComboBox *cboxMonth; //月份下拉框 QList labWeeks; //顶部星期名称 QList items;//日期元素 CalendarStyle calendarStyle; //整体样式 WeekNameFormat weekNameFormat; //星期名称格式 QDate date; //当前日期 QColor weekTextColor; //星期名称文字颜色 QColor weekBgColor; //星期名称背景色 bool showLunar; //显示农历 QString bgImage; //背景图片 SelectType selectType; //选中模式 QColor borderColor; //边框颜色 QColor weekColor; //周末颜色 QColor superColor; //角标颜色 QColor lunarColor; //农历节日颜色 QColor currentTextColor; //当前月文字颜色 QColor otherTextColor; //其他月文字颜色 QColor selectTextColor; //选中日期文字颜色 QColor hoverTextColor; //悬停日期文字颜色 QColor currentLunarColor; //当前月农历文字颜色 QColor otherLunarColor; //其他月农历文字颜色 QColor selectLunarColor; //选中日期农历文字颜色 QColor hoverLunarColor; //悬停日期农历文字颜色 QColor currentBgColor; //当前月背景颜色 QColor otherBgColor; //其他月背景颜色 QColor selectBgColor; //选中日期背景颜色 QColor hoverBgColor; //悬停日期背景颜色 private slots: void initWidget(); void initStyle(); void initDate(); void yearChanged(int); void monthChanged(int); void clicked(const QDate &date, const LunarCalendarItem::DayType &dayType); void dayChanged(const QDate &date); void dateChanged(int year, int month, int day); public: //默认尺寸和最小尺寸 QSize sizeHint() const; QSize minimumSizeHint() const; //获取和设置整体样式 CalendarStyle getCalendarStyle() const; void setCalendarStyle(const CalendarStyle &calendarStyle); //获取和设置星期名称格式 WeekNameFormat getWeekNameFormat() const; void setWeekNameFormat(const WeekNameFormat &weekNameFormat); //获取和设置日期 QDate getDate() const; void setDate(const QDate &date); //获取和设置顶部星期名称文字颜色 QColor getWeekTextColor() const; void setWeekTextColor(const QColor &weekTextColor); //获取和设置顶部星期名称文字背景色 QColor getWeekBgColor() const; void setWeekBgColor(const QColor &weekBgColor); //获取和设置是否显示农历信息 bool getShowLunar() const; void setShowLunar(bool showLunar); //获取和设置背景图片 QString getBgImage() const; void setBgImage(const QString &bgImage); //获取和设置选中背景样式 SelectType getSelectType() const; void setSelectType(const SelectType &selectType); //获取和设置边框颜色 QColor getBorderColor() const; void setBorderColor(const QColor &borderColor); //获取和设置周末颜色 QColor getWeekColor() const; void setWeekColor(const QColor &weekColor); //获取和设置角标颜色 QColor getSuperColor() const; void setSuperColor(const QColor &superColor); //获取和设置农历节日颜色 QColor getLunarColor() const; void setLunarColor(const QColor &lunarColor); //获取和设置当前月文字颜色 QColor getCurrentTextColor() const; void setCurrentTextColor(const QColor ¤tTextColor); //获取和设置其他月文字颜色 QColor getOtherTextColor() const; void setOtherTextColor(const QColor &otherTextColor); //获取和设置选中日期文字颜色 QColor getSelectTextColor() const; void setSelectTextColor(const QColor &selectTextColor); //获取和设置悬停日期文字颜色 QColor getHoverTextColor() const; void setHoverTextColor(const QColor &hoverTextColor); //获取和设置当前月农历文字颜色 QColor getCurrentLunarColor() const; void setCurrentLunarColor(const QColor ¤tLunarColor); //获取和设置其他月农历文字颜色 QColor getOtherLunarColor() const; void setOtherLunarColor(const QColor &otherLunarColor); //获取和设置选中日期农历文字颜色 QColor getSelectLunarColor() const; void setSelectLunarColor(const QColor &selectLunarColor); //获取和设置悬停日期农历文字颜色 QColor getHoverLunarColor() const; void setHoverLunarColor(const QColor &hoverLunarColor); //获取和设置当前月背景颜色 QColor getCurrentBgColor() const; void setCurrentBgColor(const QColor ¤tBgColor); //获取和设置其他月背景颜色 QColor getOtherBgColor() const; void setOtherBgColor(const QColor &otherBgColor); //获取和设置选中日期背景颜色 QColor getSelectBgColor() const; void setSelectBgColor(const QColor &selectBgColor); //获取和设置悬停日期背景颜色 QColor getHoverBgColor() const; void setHoverBgColor(const QColor &hoverBgColor); public Q_SLOTS: //转到上一年 void showPreviousYear(); //转到下一年 void showNextYear(); //转到上一月 void showPreviousMonth(); //转到下一月 void showNextMonth(); //转到今天 void showToday(); Q_SIGNALS: void clicked(const QDate &date); void selectionChanged(); }; #endif // LUNARCALENDARWIDGET_H