| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- #include "calendardtedit.h"
- #include <QDebug>
- #include <QApplication>
- #include <QDesktopWidget>
- #include <QKeyEvent>
- #include <QEvent>
- #include "calendarex.h"
- #include "UIStyleManager.h"
- #include "spdlog/spdlog.h"
- CalendarDTEdit::CalendarDTEdit(QWidget *parent) : QDateTimeEdit(parent)
- {
- setCalendarPopup(false);// 阻止自带的日历窗口
- setQSS();
- }
- 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::setCalendarEnabled(bool value)
- {
- setEnabled(value);
- m_isEnableCalendar = value;
-
- /* 先清空样式表 */
- this->setProperty("disabled", !value);
- /* 重新生效QSS */
- this->style()->unpolish(this);
- this->style()->polish(this);
- }
- /* 鼠标进入离开事件 */
- void CalendarDTEdit::enterEvent(QEvent* event)
- {
- if(isEnabled() == false)
- {
- return;
- }
- this->setProperty("hover", true);
- this->style()->unpolish(this);
- this->style()->polish(this);
- QDateTimeEdit::enterEvent(event); // 保持父类行为
- }
- /* 鼠标离开事件 */
- void CalendarDTEdit::leaveEvent(QEvent* event)
- {
- if(isEnabled() == false)
- {
- return;
- }
- this->setProperty("hover", false);
- this->style()->unpolish(this);
- this->style()->polish(this);
- QDateTimeEdit::leaveEvent(event); // 保持父类行为
- }
- void CalendarDTEdit::mousePressEvent(QMouseEvent *e)
- {
- Q_UNUSED(e);
- if(m_isEnableCalendar == false)
- {
- return;
- }
- 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);
- }
- /* 设置QSS */
- void CalendarDTEdit::setQSS()
- {
- QString qssPath;
- if(UIStyle.getUIStyle() == EUIStyle::UI_Light)
- {
- qssPath = QString(":/qss/calendardtedit_light.qss");
- }else {
- qssPath = QString(":/qss/calendardtedit_dark.qss");
- }
- QFile file(qssPath);
- if(file.open(QFile::ReadOnly))
- {
- QString qss = file.readAll();
- this->setStyleSheet(qss);
- file.close();
- } else
- {
- SPDLOG_WARN(nullptr, "打开QSS文件失败: {}", qssPath.toStdString());
- }
- }
- 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);
- }
|