QT入门——制作一个倒计时器
最近看了一种番茄学习法,大意是认真工作/学习25分钟,然后休息五分钟。在网上找了一圈发现没有特别好用的倒计时器下载,于是自己写了一个,取名番茄钟。代码量很小,直接贴了吧。
- 工程目录如图所示
.pro文件没什么需要注意的,QT会自动给加进去;
- mainwindow.h文件:主要是开始/结束按键和更新时间的槽函数、以及一些变量的声明。
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include#include #include #include 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" #includeint 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" #includeMainWindow::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用于显示剩余时间。
- 激动人心的时候到了,跑起来吧
计时结束后会弹出提示,休息一下吧~