123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #include "cdate.h"
- #include <QHBoxLayout>
- #include <QPainter>
- #include <QEvent>
- #include <QDebug>
- #include <QMouseEvent>
- #include <QEventLoop>
- #include "calendarwidgetex.h"
- #include "oneshadow.h"
- CDate::CDate(const QDate& defaultDate,QWidget *parent,PopupType type) :
- QWidget{parent},
- m_parent(parent),
- m_type(type)
- {
- init(defaultDate);
- }
- CDate::CDate(QWidget *parent,PopupType type) :
- QWidget{parent},
- m_parent(parent),
- m_type(type)
- {
- init(QDate::currentDate());
- }
- QDate CDate::execShow()
- {
- this->show();
- QEventLoop loop;
- connect(this, &CDate::signal_close, &loop, &QEventLoop::quit);
- loop.exec();
- return m_date;
- }
- void CDate::setDate(const QDate& date)
- {
- m_date = date;
- m_calendarEx->setSelectedDate(date);
- }
- void CDate::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing);
- painter.drawImage(QPoint(0,0),m_shadow->image());
- }
- bool CDate::eventFilter(QObject *watched, QEvent *event)
- {
- auto me = dynamic_cast<QMouseEvent*>(event);
- if(nullptr != me)
- {
- if(me->type() == QEvent::MouseButtonPress)
- {
- if(m_type == Popup)
- {
-
- QPoint gTopLeft = this->mapToGlobal(this->rect().topLeft());
- QRect gRect(gTopLeft.x(),gTopLeft.y(),this->width(),this->height());
-
- if(!gRect.contains(me->globalPos()))
- {
- emit signal_DateChanged(m_date);
-
- emit signal_close();
- this->close();
- }
- }
- }
- }
- return QWidget::eventFilter(watched,event);
- }
- void CDate::init(const QDate &defaultDate)
- {
-
- setWindowFlags(Qt::FramelessWindowHint);
-
- this->setAttribute(Qt::WA_TranslucentBackground);
-
- if(m_type == Popup && m_parent != nullptr)
- {
- m_parent->installEventFilter(this);
- }
-
- QHBoxLayout* layout = new QHBoxLayout(this);
- this->setLayout(layout);
- layout->setMargin(RADIUS);
- this->resize(CALENDAR_WIDTH + RADIUS*2,CALENDAR_HEIGHT + RADIUS*2);
-
- m_calendarEx = new CalendarWidgetEx(this);
- m_calendarEx->resize(CALENDAR_WIDTH,CALENDAR_HEIGHT);
- m_calendarEx->setCurrentPage(defaultDate.year(),defaultDate.month());
- m_calendarEx->setSelectedDate(defaultDate);
- layout->addWidget(m_calendarEx);
-
- m_date = defaultDate;
-
- m_shadow = new OneShadow(QSize(m_calendarEx->width(),m_calendarEx->height()),RADIUS);
-
- connect(m_calendarEx,&CalendarWidgetEx::clicked,this,[this](const QDate& date){
- m_date = date;
- emit signal_DateChanged(date);
- emit signal_close();
- this->close();
- });
- }
|