scopecalendarbtn.cpp 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #include "scopecalendarbtn.h"
  2. #include "calendarex.h"
  3. #include <QDebug>
  4. ScopeCalendarBtn::ScopeCalendarBtn(QWidget *parent)
  5. : QPushButton(parent)
  6. , m_dtFrom(QDate::currentDate())
  7. , m_dtTo(QDate::currentDate())
  8. , m_dtMin(QDate(1,1,1))
  9. , m_dtMax(QDate(9999,12,31))
  10. , m_strFormat("%1 - %2")
  11. {
  12. connect(this, &QPushButton::clicked, this, &ScopeCalendarBtn::OnPopBtnClicked);
  13. SetScope(m_dtFrom, m_dtTo);
  14. }
  15. void ScopeCalendarBtn::SetMinimumDate(const QDate &date)
  16. {
  17. m_dtMin = date;
  18. m_dtMax = qMax(m_dtMin, m_dtMax);
  19. m_dtFrom = qMax(m_dtMin, m_dtFrom);
  20. m_dtTo = qMax(m_dtMin, m_dtTo);
  21. }
  22. void ScopeCalendarBtn::SetMiaxmumDate(const QDate &date)
  23. {
  24. m_dtMax = date;
  25. m_dtMin = qMin(m_dtMax, m_dtMin);
  26. m_dtFrom = qMin(m_dtMax, m_dtFrom);
  27. m_dtTo = qMin(m_dtMax, m_dtTo);
  28. }
  29. void ScopeCalendarBtn::SetScope(const QDate &from, const QDate &to)
  30. {
  31. m_dtFrom = qBound(m_dtMin, from, m_dtMax);
  32. m_dtTo = qBound(m_dtMin, to, m_dtMax);
  33. QString text = QString(m_strFormat).arg(m_dtFrom.toString("yyyy-MM-dd"), m_dtTo.toString("yyyy-MM-dd"));
  34. setText(text);
  35. }
  36. void ScopeCalendarBtn::OnPopBtnClicked()
  37. {
  38. ScopedCalendar *pC = new ScopedCalendar(m_dtFrom, m_dtTo);
  39. pC->show();
  40. pC->positionCalendarPopup(this);
  41. if(m_dtMin.isValid()) pC->SetMinimumDate(m_dtMin);
  42. if(m_dtMax.isValid()) pC->SetMaximumDate(m_dtMax);
  43. connect(pC, &ScopedCalendar::sig_ScopeSelected, this, &ScopeCalendarBtn::OnScopeSelected);
  44. }
  45. void ScopeCalendarBtn::OnScopeSelected(const QDate &from, const QDate &to)
  46. {
  47. SetScope(from, to);
  48. emit sig_ScopeSelected(from, to);
  49. }
  50. void ScopeCalendarBtn::paintEvent(QPaintEvent *event)
  51. {
  52. // PainterEx painter(this);
  53. // painter.SetBrushOnly(Qt::gray);
  54. // painter.drawRect(rect());
  55. QPushButton::paintEvent(event);
  56. }