| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | #include "calendardtedit.h"#include <QDebug>#include <QApplication>#include <QDesktopWidget>#include <QKeyEvent>#include <QEvent>#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);}
 |