timepopupwidget.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. #include "timepopupwidget.h"
  2. #include "ui_timepopupwidget.h"
  3. #include <QListWidgetItem>
  4. #include <QFile>
  5. #include <qobjectdefs.h>
  6. #include "UIStyleManager.h"
  7. #include "spdlog/spdlog.h"
  8. TimePopupWidget::TimePopupWidget(QWidget *parent) :
  9. QWidget(parent),
  10. ui(new Ui::TimePopupWidget)
  11. {
  12. ui->setupUi(this);
  13. ui->widget_Hour->Init(TimePartWidget::HOUR);
  14. ui->widget_Minute->Init(TimePartWidget::MINUTE);
  15. ui->widget_Second->Init(TimePartWidget::SECOND);
  16. connect(ui->widget_Hour, &TimePartWidget::sigItemClicked, this, &TimePopupWidget::do_listItemClicked);
  17. connect(ui->widget_Minute, &TimePartWidget::sigItemClicked, this, &TimePopupWidget::do_listItemClicked);
  18. connect(ui->widget_Second, &TimePartWidget::sigItemClicked, this, &TimePopupWidget::do_listItemClicked);
  19. connect(ui->pBtn_Ok, &QPushButton::clicked, this, &TimePopupWidget::do_pBtn_Ok_Clicked);
  20. connect(ui->pBtn_Cancel, &QPushButton::clicked, this, &TimePopupWidget::do_pBtn_Cancel_Clicked);
  21. Reset();
  22. }
  23. TimePopupWidget::~TimePopupWidget()
  24. {
  25. delete ui;
  26. }
  27. /* 初始化 */
  28. void TimePopupWidget::Init(const QVector<int> &types)
  29. {
  30. Reset();
  31. /* 先隐藏全部的时间条 */
  32. ui->widget_Hour->hide();
  33. ui->widget_Minute->hide();
  34. ui->widget_Second->hide();
  35. /* 初始化时间条 */
  36. for(const auto& type : types)
  37. {
  38. TimePartWidget::emSection emType = static_cast<TimePartWidget::emSection>(type);
  39. if (emType >= TimePartWidget::emSection::MAX_SECTION) {
  40. continue;
  41. }
  42. if(type == TimePartWidget::HOUR)
  43. {
  44. ui->widget_Hour->show();
  45. }
  46. else if(type == TimePartWidget::MINUTE)
  47. {
  48. ui->widget_Minute->show();
  49. }
  50. else if(type == TimePartWidget::SECOND)
  51. {
  52. ui->widget_Second->show();
  53. }
  54. }
  55. setQSS();
  56. }
  57. /* 重置为默认值 */
  58. void TimePopupWidget::Reset()
  59. {
  60. QDateTime dt = QDateTime::currentDateTime();
  61. dt.setTime(QTime(0, 0, 0));
  62. ui->widget_Hour->SetTime(dt);
  63. ui->widget_Minute->SetTime(dt);
  64. ui->widget_Second->SetTime(dt);
  65. }
  66. /* 设置时间 */
  67. void TimePopupWidget::setTime(const QDateTime& time)
  68. {
  69. m_currentDateTime = time;
  70. ui->widget_Hour->SetTime(time);
  71. ui->widget_Minute->SetTime(time);
  72. ui->widget_Second->SetTime(time);
  73. }
  74. /* 设置QSS */
  75. void TimePopupWidget::setQSS()
  76. {
  77. QString qssPath;
  78. if(UIStyle.getUIStyle() == EUIStyle::UI_Light)
  79. {
  80. qssPath = QString(":/Res/light/timepopupwidget.qss");
  81. }
  82. else if(UIStyle.getUIStyle() == EUIStyle::UI_Dark)
  83. {
  84. qssPath = QString(":/Res/dark/timepopupwidget.qss");
  85. }
  86. QFile file(qssPath);
  87. if(file.open(QFile::ReadOnly))
  88. {
  89. QString styleSheet = QLatin1String(file.readAll());
  90. setStyleSheet(styleSheet);
  91. file.close();
  92. }
  93. else
  94. {
  95. SPDLOG_ERROR("open qss file failed: {}", qssPath.toStdString());
  96. }
  97. }
  98. /**
  99. * @brief 时间列表选中事件
  100. * @param item
  101. */
  102. void TimePopupWidget::do_listItemClicked(QListWidgetItem *item)
  103. {
  104. if (nullptr == item) return;
  105. TimePartWidget* pWdg = reinterpret_cast<TimePartWidget*>(QObject::sender());
  106. if (nullptr == pWdg) return;
  107. QString data(item->text());
  108. if (data.isEmpty()) return; // 过滤空白项
  109. // QDateTime oldDt(ui->dateTimeEdit->dateTime());
  110. QDateTime oldDt = m_currentDateTime;
  111. QTime t(m_currentDateTime.time());
  112. switch (pWdg->GetType()) {
  113. case TimePartWidget::HOUR:
  114. {
  115. t.setHMS(data.toInt(), t.minute(), t.second());
  116. break;
  117. }
  118. case TimePartWidget::MINUTE:
  119. {
  120. t.setHMS(t.hour(), data.toInt(), t.second());
  121. break;
  122. }
  123. case TimePartWidget::SECOND:
  124. {
  125. t.setHMS(t.hour(), t.minute(), data.toInt());
  126. break;
  127. }
  128. default:
  129. break;
  130. }
  131. if (oldDt.time() != t) {
  132. // m_bTimeFlag = true;
  133. // ui->dateTimeEdit->setTime(t);
  134. m_currentDateTime.setTime(t);
  135. emit signal_timeChanged(m_currentDateTime.time());
  136. }
  137. }
  138. /* 点击了确定按钮 */
  139. void TimePopupWidget::do_pBtn_Ok_Clicked()
  140. {
  141. emit signal_timeChanged(m_currentDateTime.time());
  142. emit signal_closePopup(true);
  143. }
  144. /* 点击了取消按钮 */
  145. void TimePopupWidget::do_pBtn_Cancel_Clicked()
  146. {
  147. // m_currentDateTime = m_formerDateTime;
  148. // emit signal_timeChanged(m_currentDateTime.time());
  149. emit signal_closePopup(false);
  150. }