#ifndef CDATE_H #define CDATE_H /** * 使用说明 * 1、这个是仿照TimeWidget做的一个可以点击空白处隐藏自身的日历控件 * 2、实现方式就是将父类的事件注册到这个控件上,拦截父类的鼠标点击,判断 * 是否在这个控件上进行隐藏,因此控件显示范围就依赖于父类空间大小了 * 3、使用方法: * 1) 可以选择点击空白处隐藏或者不隐藏,设置PopuType类型就行 * */ #include #include #include class CalendarWidgetEx; class OneShadow; class CDate : public QWidget { Q_OBJECT const int RADIUS = 16; /* 阴影范围 */ const int CALENDAR_WIDTH = 325; /* 日历大小 */ const int CALENDAR_HEIGHT = 350; public: enum PopupType{ Popup = 0, NoPopup = 1 }; CDate(const QDate& defaultDate,QWidget *parent = nullptr,PopupType type = Popup); CDate(QWidget *parent = nullptr,PopupType type = Popup); /* 阻塞执行 */ QDate execShow(); /* 设置日期 */ void setDate(const QDate& date); /* 获取日期 */ QDate getDate() const { return m_date; } signals: void signal_DateChanged(const QDate& date); void signal_close(); protected: void paintEvent(QPaintEvent *event); bool eventFilter(QObject *watched, QEvent *event); private: void init(const QDate& defaultDate); private: QDate m_date; CalendarWidgetEx* m_calendarEx = nullptr; OneShadow* m_shadow = nullptr; QWidget* m_parent = nullptr; PopupType m_type; }; #endif // CDATE_H