#include "scopecalendarbtn.h" #include "calendarex.h" #include ScopeCalendarBtn::ScopeCalendarBtn(QWidget *parent) : QPushButton(parent) , m_dtFrom(QDate::currentDate()) , m_dtTo(QDate::currentDate()) , m_dtMin(QDate(1,1,1)) , m_dtMax(QDate(9999,12,31)) , m_strFormat("%1 - %2") { connect(this, &QPushButton::clicked, this, &ScopeCalendarBtn::OnPopBtnClicked); SetScope(m_dtFrom, m_dtTo); } void ScopeCalendarBtn::SetMinimumDate(const QDate &date) { m_dtMin = date; m_dtMax = qMax(m_dtMin, m_dtMax); m_dtFrom = qMax(m_dtMin, m_dtFrom); m_dtTo = qMax(m_dtMin, m_dtTo); } void ScopeCalendarBtn::SetMiaxmumDate(const QDate &date) { m_dtMax = date; m_dtMin = qMin(m_dtMax, m_dtMin); m_dtFrom = qMin(m_dtMax, m_dtFrom); m_dtTo = qMin(m_dtMax, m_dtTo); } void ScopeCalendarBtn::SetScope(const QDate &from, const QDate &to) { m_dtFrom = qBound(m_dtMin, from, m_dtMax); m_dtTo = qBound(m_dtMin, to, m_dtMax); QString text = QString(m_strFormat).arg(m_dtFrom.toString("yyyy-MM-dd"), m_dtTo.toString("yyyy-MM-dd")); setText(text); } void ScopeCalendarBtn::OnPopBtnClicked() { ScopedCalendar *pC = new ScopedCalendar(m_dtFrom, m_dtTo); pC->show(); pC->positionCalendarPopup(this); if(m_dtMin.isValid()) pC->SetMinimumDate(m_dtMin); if(m_dtMax.isValid()) pC->SetMaximumDate(m_dtMax); connect(pC, &ScopedCalendar::sig_ScopeSelected, this, &ScopeCalendarBtn::OnScopeSelected); } void ScopeCalendarBtn::OnScopeSelected(const QDate &from, const QDate &to) { SetScope(from, to); emit sig_ScopeSelected(from, to); } void ScopeCalendarBtn::paintEvent(QPaintEvent *event) { // PainterEx painter(this); // painter.SetBrushOnly(Qt::gray); // painter.drawRect(rect()); QPushButton::paintEvent(event); }