首頁 > 軟體

用QT實現計時器功能

2022-08-04 22:07:50

本文範例為大家分享了QT實現計時器功能的具體程式碼,供大家參考,具體內容如下

首先新建工程,Ctrl+N->Application(Qt)->Qt Widgets Application,然後進入設定介面,名稱和路徑隨意就好;Build System不考慮效能用qmake比較簡單;剩下的採用預設選項就行。

初始化結束後,其專案檔案組織如下

  • Timer.pro 此為工程檔案
  • Headers 用於存放標頭檔案的目錄
  • Sources 用於存放原始碼
  • Forms 用於存放.ui檔案,即介面設計檔案

雙擊Forms下面的mainwindow.ui檔案,進入圖形化的UI編輯介面,左側為各種控制元件,中間為程式設計的主視窗。由於一個計時器不需要太大的尺寸,故而可以直接拖動視窗右下角的三個點,更改其尺寸。也可以定位到右側屬性欄的geometry,展開後將寬度和高度分別設為400和200。

然後,將左側Buttons下面的Push Button拖動到主視窗,然後在右側可看到Push Button的各種屬性。將QObject中的objectName改為pbStart;將QAbstractButton下的text改為start。一會兒用於開始計時。

在左側搜尋LCD,將LCD Number拖動到主視窗,將名字改為Timer,用於顯示時間。

此時,我們最左側的索引標籤選中的是第三個設計,若點選第二個編輯,則可直接編輯視窗設計檔案mainWindow.ui,然而只是讓人看看,並不讓編輯。但總之,至此已寫完了一個簡單的UI

接下來,要實現計時器的核心功能——計時,從而需要寫c++程式碼。首先在.h檔案中,寫入需要的成員變數。考慮到要實現計時器的功能,所以至少需要一個用於計時的時鐘和一個可以記錄秒數的整數。故而進入mainWindow.h,在private:下輸入成員,當然也不要忘了匯入標頭檔案,最終結果為

private:
    Ui::MainWindow *ui;
    QTimer * timer;
    QTime * TimeRecord;

除了成員變數,還要有成員函數。其中計時需要繫結一個函數,start按鈕需要繫結一個,外加時間歸零需要一個,故需三個成員函數,最終mainWindow.h內容為

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTimer>
#include <QTime>

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 initTime();
    void updateTime();
    void pbStart_clicked();
private:
    Ui::MainWindow *ui;
    QTimer * timer;
    QTime * TimeRecord;
};
#endif // MAINWINDOW_H

定義好標頭檔案,接下來就要在.cpp中具體實現了,程式碼總共不到50行,如下:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent) , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    timer = new QTimer;
    TimeRecord = new QTime;
    ui->Timer->setDigitCount(8);
    initTime();     //令LCD顯示00:00:00
    //連線槽函數,將timer的timeout行為,連線到updateTime函數中
    connect(timer, SIGNAL(timeout()), this, SLOT(updateTime()));
    //當點選(clicked)pbStart時,呼叫函數pbStart_clicked
    connect(ui->pbStart, SIGNAL(clicked()), this, SLOT(pbStart_clicked()));
}

MainWindow::~MainWindow(){
    delete ui;
}

void MainWindow::initTime(){
    TimeRecord->setHMS(0, 0, 0); //時間復位為0
    ui->Timer->display(TimeRecord->toString("hh:mm:ss"));
}

void MainWindow::updateTime(){
    //每次更新時間,TimeRecord增加1
    *TimeRecord = TimeRecord->addSecs(1);
    ui->Timer->display(TimeRecord->toString("hh:mm:ss"));
}

void MainWindow::pbStart_clicked(){
    if (QString::compare(ui->pbStart->text(),"stop")){
        //當按鈕內容不為'stop'時,說明開啟計時
        timer->start(1000);
        ui->pbStart->setText("stop");//計時開始後,按鈕變為'stop'
    }else{
        timer->stop();
        ui->pbStart->setText("start");
        initTime();
    }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com