#include "timepopupwidget.h" #include "ui_timepopupwidget.h" #include #include #include #include "UIStyleManager.h" #include "spdlog/spdlog.h" TimePopupWidget::TimePopupWidget(QWidget *parent) : QWidget(parent), ui(new Ui::TimePopupWidget) { ui->setupUi(this); ui->widget_Hour->Init(TimePartWidget::HOUR); ui->widget_Minute->Init(TimePartWidget::MINUTE); ui->widget_Second->Init(TimePartWidget::SECOND); connect(ui->widget_Hour, &TimePartWidget::sigItemClicked, this, &TimePopupWidget::do_listItemClicked); connect(ui->widget_Minute, &TimePartWidget::sigItemClicked, this, &TimePopupWidget::do_listItemClicked); connect(ui->widget_Second, &TimePartWidget::sigItemClicked, this, &TimePopupWidget::do_listItemClicked); connect(ui->pBtn_Ok, &QPushButton::clicked, this, &TimePopupWidget::do_pBtn_Ok_Clicked); connect(ui->pBtn_Cancel, &QPushButton::clicked, this, &TimePopupWidget::do_pBtn_Cancel_Clicked); Reset(); } TimePopupWidget::~TimePopupWidget() { delete ui; } /* 初始化 */ void TimePopupWidget::Init(const QVector &types) { Reset(); /* 先隐藏全部的时间条 */ ui->widget_Hour->hide(); ui->widget_Minute->hide(); ui->widget_Second->hide(); /* 初始化时间条 */ for(const auto& type : types) { TimePartWidget::emSection emType = static_cast(type); if (emType >= TimePartWidget::emSection::MAX_SECTION) { continue; } if(type == TimePartWidget::HOUR) { ui->widget_Hour->show(); } else if(type == TimePartWidget::MINUTE) { ui->widget_Minute->show(); } else if(type == TimePartWidget::SECOND) { ui->widget_Second->show(); } } setQSS(); } /* 重置为默认值 */ void TimePopupWidget::Reset() { QDateTime dt = QDateTime::currentDateTime(); dt.setTime(QTime(0, 0, 0)); ui->widget_Hour->SetTime(dt); ui->widget_Minute->SetTime(dt); ui->widget_Second->SetTime(dt); } /* 设置时间 */ void TimePopupWidget::setTime(const QDateTime& time) { m_currentDateTime = time; ui->widget_Hour->SetTime(time); ui->widget_Minute->SetTime(time); ui->widget_Second->SetTime(time); } /* 设置QSS */ void TimePopupWidget::setQSS() { QString qssPath; if(UIStyle.getUIStyle() == EUIStyle::UI_Light) { qssPath = QString(":/Res/light/timepopupwidget.qss"); } else if(UIStyle.getUIStyle() == EUIStyle::UI_Dark) { qssPath = QString(":/Res/dark/timepopupwidget.qss"); } QFile file(qssPath); if(file.open(QFile::ReadOnly)) { QString styleSheet = QLatin1String(file.readAll()); setStyleSheet(styleSheet); file.close(); } else { SPDLOG_ERROR("open qss file failed: {}", qssPath.toStdString()); } } /** * @brief 时间列表选中事件 * @param item */ void TimePopupWidget::do_listItemClicked(QListWidgetItem *item) { if (nullptr == item) return; TimePartWidget* pWdg = reinterpret_cast(QObject::sender()); if (nullptr == pWdg) return; QString data(item->text()); if (data.isEmpty()) return; // 过滤空白项 // QDateTime oldDt(ui->dateTimeEdit->dateTime()); QDateTime oldDt = m_currentDateTime; QTime t(m_currentDateTime.time()); switch (pWdg->GetType()) { case TimePartWidget::HOUR: { t.setHMS(data.toInt(), t.minute(), t.second()); break; } case TimePartWidget::MINUTE: { t.setHMS(t.hour(), data.toInt(), t.second()); break; } case TimePartWidget::SECOND: { t.setHMS(t.hour(), t.minute(), data.toInt()); break; } default: break; } if (oldDt.time() != t) { // m_bTimeFlag = true; // ui->dateTimeEdit->setTime(t); m_currentDateTime.setTime(t); emit signal_timeChanged(m_currentDateTime.time()); } } /* 点击了确定按钮 */ void TimePopupWidget::do_pBtn_Ok_Clicked() { emit signal_timeChanged(m_currentDateTime.time()); emit signal_closePopup(true); } /* 点击了取消按钮 */ void TimePopupWidget::do_pBtn_Cancel_Clicked() { // m_currentDateTime = m_formerDateTime; // emit signal_timeChanged(m_currentDateTime.time()); emit signal_closePopup(false); }