用QT實現計時器功能
本文實例為大傢分享瞭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(); } }
以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。