countdownwidget.cpp 1.2 KB

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