| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 | #ifndef QCUSTOMCALENDARWIDGET_H#define QCUSTOMCALENDARWIDGET_H#include <QCalendarWidget>#include <QPushButton>#include <QLabel>#include <QProxyStyle>#include "calendarheader.h"#include "calendarnav.h"class ScopeSelectionModel;class NoFocusStyle : public QProxyStyle{    Q_OBJECTpublic:    explicit NoFocusStyle(QObject *parent):QProxyStyle() { setParent(parent); }private:    void drawPrimitive(PrimitiveElement element, const QStyleOption *option,                       QPainter *painter, const QWidget *widget) const;};/** * @brief The CalendarWidgetEx class */class CalendarWidgetEx : public QCalendarWidget{    Q_OBJECTpublic:    enum SelectMode    {        Normal,        Multi,        Scope,    };public:    explicit CalendarWidgetEx(QWidget *parent = nullptr);    ~CalendarWidgetEx() override {}    void SetSelectMode(SelectMode mode, ScopeSelectionModel *pDataModel = nullptr);    QList<QDate> GetSelectDays(){return m_listMultiSelectDays;}    void hideNavigatioinButton(bool bPreYear, bool bPreMon, bool bNextYear, bool bNextMon);    /* 设置UI样式,0亮色,1暗色 */    void setUIStyle();private:    QDate dateForCell(int row, int column) const;    QDate referenceDate() const;    int columnForFirstOfMonth(const QDate &date) const;    int columnForDayOfWeek(int day) const;    void initSkinColor();protected:    void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const override;    void paintEvent(QPaintEvent *) override;    void mouseMoveEvent(QMouseEvent *event) override;    void leaveEvent(QEvent *) override;public:    QSize minimumSizeHint() const override;private slots:    void OnClicked(const QDate &date);private:    int m_style = 0;    CalendarNav* m_pNav = nullptr;    CalendarHeader* m_pHeader = nullptr;    /* 亮色 */    const QColor NORMAL_TEXT_BRIGHT{QColor(58,63,99)};    const QColor TODAY_TEXT_BRIGHT{QColor(68,88,254)};    const QColor SELECT_TEXT_BRIGHT{Qt::white};    const QColor DISABLE_TEXT_BRIGHT{QColor(133, 142, 189)};    const QColor SPLIT_LINE_BRIGHT{QColor(0, 0, 0, 23)};    const QColor SELECT_BRIGHT{QColor(68, 88, 254)};    const QColor HOVER_BRIGHT{QColor(227, 238, 255)};    const QColor BG_BRUSH_BRIGHT{QColor(255,255,255)};      /* 背景 */    const QColor BG_PEN_BRIGHT{QColor(0, 0, 0, 23)};        /* 线条 */    /* 暗色 */    const QColor NORMAL_TEXT_DEEP{QColor(255,255,255,230)};    const QColor TODAY_TEXT_DEEP{Qt::black};    const QColor SELECT_TEXT_DEEP{Qt::black};    const QColor DISABLE_TEXT_DEEP{QColor(255,255,255,77)};    const QColor SPLIT_LINE_DEEP{QColor(255,255,255,64)};    const QColor SELECT_DEEP{QColor(233, 161, 18)};    const QColor HOVER_DEEP{QColor(132, 134, 136)};        const QColor TODAY_DEEP{QColor(67, 142, 255)};    const QColor BG_PEN_DEEP{QColor(255,255,255,51)};       /* 线条 */    const QColor BG_BRUSH_DEEP{QColor{116,117,120}};        /* 背景 */    const QColor BG_SPECIAL_PEN_DEEP{QColor{27, 186, 102}};     const QColor BG_SPECIAL_BRUSH_DEEP{QColor{78, 112, 97}};    const int DEFAULT_FONT_SIZE = 16;    const int TEXT_WIDTH = 24;    const qreal WINDOW_RADIUS = 4.0;    const int WINDOW_WIDTH = 325;    const int WINDOW_HEIGHT = 350;    QDate m_dateMouseOver;    QList<QDate> m_listMultiSelectDays;    SelectMode m_modeSelection;    ScopeSelectionModel *m_pDateScopeModel;    int m_nLineHeight;      //星期和日之间的分割线的Y坐标    bool m_hasTopSplitLine; // 是否绘制顶部分割线    QColor m_normalTextColor;    QColor m_todayTextColor;    QColor m_selectTextColor;    QColor m_disableTextColor;    QColor m_splitLineColor;    QColor m_selectBlockColor;    QColor m_hoverBlockColor;    QColor m_bgBrushColor;          /* 背景画刷 */    QColor m_bgPenColor;            /* 背景画笔 */};#endif // QCUSTOMCALENDARWIDGET_H
 |