QT入門——制作一個倒計時器


  最近看了一種番茄學習法,大意是認真工作/學習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用於顯示剩余時間。

 

 

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

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM