countdownwidget.cpp 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #include "countdownwidget.h"
  2. CountdownWidget::CountdownWidget(QWidget *parent) : QWidget(parent), m_remainingSeconds(5)
  3. {
  4. setWindowFlags(Qt::FramelessWindowHint);
  5. setAttribute(Qt::WA_TranslucentBackground);
  6. m_timer = new QTimer(this);
  7. connect(m_timer, &QTimer::timeout, this, &CountdownWidget::onTimerTimeout);
  8. m_timer->start(1000);
  9. }
  10. CountdownWidget::~CountdownWidget()
  11. {
  12. if (m_timer->isActive()) {
  13. m_timer->stop();
  14. }
  15. }
  16. void CountdownWidget::paintEvent(QPaintEvent *event)
  17. {
  18. Q_UNUSED(event);
  19. QPainter painter(this);
  20. painter.setRenderHint(QPainter::Antialiasing);
  21. QBrush brush(Qt::red);
  22. painter.setBrush(brush);
  23. painter.drawEllipse(rect());
  24. QFont font;
  25. font.setPointSize(58);
  26. font.setBold(true);
  27. painter.setFont(font);
  28. painter.setPen(Qt::white);
  29. if (m_remainingSeconds > 0) {
  30. painter.drawText(rect(), Qt::AlignCenter, QString::number(m_remainingSeconds));
  31. } else {
  32. painter.drawText(rect(), Qt::AlignCenter, "0");
  33. }
  34. }
  35. void CountdownWidget::onTimerTimeout()
  36. {
  37. m_remainingSeconds--;
  38. if (m_remainingSeconds == 0) {
  39. m_timer->stop();
  40. close();
  41. emit countdownFinished(); // 发出自定义信号
  42. }
  43. update();
  44. }