calendarwidgetex.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. #ifndef QCUSTOMCALENDARWIDGET_H
  2. #define QCUSTOMCALENDARWIDGET_H
  3. #include <QCalendarWidget>
  4. #include <QPushButton>
  5. #include <QLabel>
  6. #include <QProxyStyle>
  7. #include "calendarheader.h"
  8. #include "calendarnav.h"
  9. class ScopeSelectionModel;
  10. class NoFocusStyle : public QProxyStyle
  11. {
  12. Q_OBJECT
  13. public:
  14. explicit NoFocusStyle(QObject *parent):QProxyStyle() { setParent(parent); }
  15. private:
  16. void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
  17. QPainter *painter, const QWidget *widget) const;
  18. };
  19. /**
  20. * @brief The CalendarWidgetEx class
  21. */
  22. class CalendarWidgetEx : public QCalendarWidget
  23. {
  24. Q_OBJECT
  25. public:
  26. enum SelectMode
  27. {
  28. Normal,
  29. Multi,
  30. Scope,
  31. };
  32. public:
  33. explicit CalendarWidgetEx(QWidget *parent = nullptr);
  34. ~CalendarWidgetEx() override {}
  35. void SetSelectMode(SelectMode mode, ScopeSelectionModel *pDataModel = nullptr);
  36. QList<QDate> GetSelectDays(){return m_listMultiSelectDays;}
  37. void hideNavigatioinButton(bool bPreYear, bool bPreMon, bool bNextYear, bool bNextMon);
  38. /* 设置UI样式,0亮色,1暗色 */
  39. void setUIStyle();
  40. private:
  41. QDate dateForCell(int row, int column) const;
  42. QDate referenceDate() const;
  43. int columnForFirstOfMonth(const QDate &date) const;
  44. int columnForDayOfWeek(int day) const;
  45. void initSkinColor();
  46. protected:
  47. void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const override;
  48. void paintEvent(QPaintEvent *) override;
  49. void mouseMoveEvent(QMouseEvent *event) override;
  50. void leaveEvent(QEvent *) override;
  51. public:
  52. QSize minimumSizeHint() const override;
  53. private slots:
  54. void OnClicked(const QDate &date);
  55. private:
  56. int m_style = 0;
  57. CalendarNav* m_pNav = nullptr;
  58. CalendarHeader* m_pHeader = nullptr;
  59. /* 亮色 */
  60. const QColor NORMAL_TEXT_BRIGHT{QColor(58,63,99)};
  61. const QColor TODAY_TEXT_BRIGHT{QColor(68,88,254)};
  62. const QColor SELECT_TEXT_BRIGHT{Qt::white};
  63. const QColor DISABLE_TEXT_BRIGHT{QColor(133, 142, 189)};
  64. const QColor SPLIT_LINE_BRIGHT{QColor(0, 0, 0, 23)};
  65. const QColor SELECT_BRIGHT{QColor(68, 88, 254)};
  66. const QColor HOVER_BRIGHT{QColor(227, 238, 255)};
  67. const QColor BG_BRUSH_BRIGHT{QColor(255,255,255)}; /* 背景 */
  68. const QColor BG_PEN_BRIGHT{QColor(0, 0, 0, 23)}; /* 线条 */
  69. /* 暗色 */
  70. const QColor NORMAL_TEXT_DEEP{QColor(255,255,255,230)};
  71. const QColor TODAY_TEXT_DEEP{Qt::black};
  72. const QColor SELECT_TEXT_DEEP{Qt::black};
  73. const QColor DISABLE_TEXT_DEEP{QColor(255,255,255,77)};
  74. const QColor SPLIT_LINE_DEEP{QColor(255,255,255,64)};
  75. const QColor SELECT_DEEP{QColor(233, 161, 18)};
  76. const QColor HOVER_DEEP{QColor(132, 134, 136)};
  77. const QColor TODAY_DEEP{QColor(67, 142, 255)};
  78. const QColor BG_PEN_DEEP{QColor(255,255,255,51)}; /* 线条 */
  79. const QColor BG_BRUSH_DEEP{QColor{116,117,120}}; /* 背景 */
  80. const QColor BG_SPECIAL_PEN_DEEP{QColor{27, 186, 102}};
  81. const QColor BG_SPECIAL_BRUSH_DEEP{QColor{78, 112, 97}};
  82. const int DEFAULT_FONT_SIZE = 16;
  83. const int TEXT_WIDTH = 24;
  84. const qreal WINDOW_RADIUS = 4.0;
  85. const int WINDOW_WIDTH = 325;
  86. const int WINDOW_HEIGHT = 350;
  87. QDate m_dateMouseOver;
  88. QList<QDate> m_listMultiSelectDays;
  89. SelectMode m_modeSelection;
  90. ScopeSelectionModel *m_pDateScopeModel;
  91. int m_nLineHeight; //星期和日之间的分割线的Y坐标
  92. bool m_hasTopSplitLine; // 是否绘制顶部分割线
  93. QColor m_normalTextColor;
  94. QColor m_todayTextColor;
  95. QColor m_selectTextColor;
  96. QColor m_disableTextColor;
  97. QColor m_splitLineColor;
  98. QColor m_selectBlockColor;
  99. QColor m_hoverBlockColor;
  100. QColor m_bgBrushColor; /* 背景画刷 */
  101. QColor m_bgPenColor; /* 背景画笔 */
  102. };
  103. #endif // QCUSTOMCALENDARWIDGET_H