#include "calendardtedit.h" #include #include #include #include #include #include "calendarex.h" CalendarDTEdit::CalendarDTEdit(QWidget *parent) : QDateTimeEdit(parent) { setCalendarPopup(false);// 阻止自带的日历窗口 } CalendarDTEdit::~CalendarDTEdit() { } void CalendarDTEdit::CloseCalendar() { } /* 手动触发日期选择弹框 */ void CalendarDTEdit::triggerCalendarPopup() { } /** * @brief 设置手动禁止修改日期区域,只能使用弹窗 * * @param value 是否禁止修改日期区域 * @param triggerPopup 点击日期区域是否会跳出弹窗 */ void CalendarDTEdit::setManualDisableEdit(bool value, bool triggerPopup) { if(value) { setReadOnly(true); for(auto& it : children()) { if(it->objectName() == "qt_spinbox_lineedit") { m_pCalendar = it; m_pCalendar->installEventFilter(this); } } }else { setReadOnly(false); if(m_pCalendar != nullptr) { m_pCalendar->removeEventFilter(this); m_pCalendar = nullptr; } } m_isPopup = triggerPopup; } void CalendarDTEdit::mousePressEvent(QMouseEvent *e) { Q_UNUSED(e); CalendarEx *pC = new CalendarEx(date()); if (nullptr == pC) return; connect(pC, &CalendarEx::sig_DateChanged, this, [this](const QDate& date){ if (date.isValid()) { setDate(date); } }); pC->show(); pC->positionCalendarPopup(this); } bool CalendarDTEdit::eventFilter(QObject* watched, QEvent* event) { if(watched == m_pCalendar) { if(event->type() == QEvent::MouseButtonPress) { // qDebug() << "点击了日期区域"; if(m_isPopup) { mousePressEvent(nullptr); } } } return QDateTimeEdit::eventFilter(watched, event); }