最近看了一種番茄學習法,大意是認真工作/學習25分鍾,然后休息五分鍾。在網上找了一圈發現沒有特別好用的倒計時器下載,於是自己寫了一個,取名番茄鍾。代碼量很小,直接貼了吧。
- 工程目錄如圖所示

.pro文件沒什么需要注意的,QT會自動給加進去;
- mainwindow.h文件:主要是開始/結束按鍵和更新時間的槽函數、以及一些變量的聲明。
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimer> #include <QString> #include <QMessageBox> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private slots: void updateTime(); void on_pbStart_clicked(); void on_pbEnd_clicked(); private: Ui::MainWindow *ui; QTimer *timer; int m_secCnt; int m_minCnt; bool isStart; }; #endif // MAINWINDOW_H
- main.cpp文件:此處添加保持和取消窗口在前的語句,默認取消。
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.setWindowFlags(w.windowFlags() | Qt::WindowStaysOnTopHint); //取消窗口最前 //w.setWindowFlags(w.windowFlags() &~ Qt::WindowStaysOnTopHint); w.show(); return a.exec(); }
- mainwindow.cpp文件:mainwindow.h中函數的實現。使用QLCDNumber控件去顯示時間
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //去掉標題欄 //this->setWindowFlags(Qt::FramelessWindowHint); //設置透明窗體 120號屬性 //this->setAttribute(Qt::WA_TranslucentBackground); setWindowTitle("Tomato Clock"); //setWindowFlags(Qt::FramelessWindowHint); isStart = false; //初始為還未計時 timer = new QTimer; m_secCnt = 0; m_minCnt = 0; ui->lcdNumber->setDigitCount(5);//顯示位數 ui->lcdNumber->setMode(QLCDNumber::Dec);//設置顯示模式為十進制 ui->lcdNumber->setSegmentStyle(QLCDNumber::Filled);//設置顯示外觀Outline、Filled、Flat三種 ui->lcdNumber->display("25:00"); ui->pbEnd->setEnabled(false); connect(timer,SIGNAL(timeout()),this,SLOT(updateTime())); } MainWindow::~MainWindow() { delete ui; } void MainWindow::updateTime(){ m_secCnt++; if(m_secCnt >= 60) { m_secCnt = 0; m_minCnt++; } if(m_minCnt >= 25) { //disconnect(timer,SIGNAL(timeout()),this,SLOT(updateTime200())); ui->pbEnd->setDisabled(true); ui->pbStart->setEnabled(true); timer->stop(); m_secCnt = 0; m_minCnt = 0; isStart = false; QMessageBox::information(this, tr("溫馨提示"),tr("時間到,休息一下吧~"), QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Ok); } QString min = QString::number(24 - m_minCnt); QString sec = QString::number(59 - m_secCnt); if(min.length() == 1) min = "0" + min; if(sec.length() == 1) sec = "0" + sec; QString timeToShow = min + ":" + sec; ui->lcdNumber->display(timeToShow); } void MainWindow::on_pbStart_clicked() { if(!isStart) //尚未開始 開始計時 { timer->start(1000); ui->lcdNumber->display("24:59"); ui->pbStart->setDisabled(true); ui->pbEnd->setEnabled(true); } } void MainWindow::on_pbEnd_clicked() { ui->pbEnd->setDisabled(true); ui->pbStart->setEnabled(true); timer->stop(); m_secCnt = 0; m_minCnt = 0; ui->lcdNumber->display("00:00"); isStart = false; }
- UI設計:界面元素非常簡單,兩個QPushButton用於控制計時器和一個QLCDNumber用於顯示剩余時間。

- 激動人心的時候到了,跑起來吧

計時結束后會彈出提示,休息一下吧~

