123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #ifndef QCUSTOMCALENDARWIDGET_H
- #define QCUSTOMCALENDARWIDGET_H
- #include <QCalendarWidget>
- #include <QPushButton>
- #include <QLabel>
- #include <QProxyStyle>
- class ScopeSelectionModel;
- class NoFocusStyle : public QProxyStyle
- {
- Q_OBJECT
- public:
- 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_OBJECT
- public:
- 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);
- 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:
- 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 int DEFAULT_FONT_SIZE = 14;
- const int TEXT_WIDTH = 24;
- const qreal WINDOW_RADIUS = 2.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;
- };
- #endif // QCUSTOMCALENDARWIDGET_H
|