用QT實(shí)現(xiàn)計(jì)時器功能
本文實(shí)例為大家分享了QT實(shí)現(xiàn)計(jì)時器功能的具體代碼,供大家參考,具體內(nèi)容如下
首先新建工程,Ctrl
+N
->Application(Qt)
->Qt Widgets Application
,然后進(jìn)入設(shè)置界面,名稱和路徑隨意就好;Build System不考慮性能用qmake
比較簡單;剩下的采用默認(rèn)選項(xiàng)就行。
初始化結(jié)束后,其項(xiàng)目文件組織如下
Timer.pro
此為工程文件Headers
用于存放頭文件的目錄Sources
用于存放源代碼Forms
用于存放.ui
文件,即界面設(shè)計(jì)文件
雙擊Forms
下面的mainwindow.ui
文件,進(jìn)入圖形化的UI編輯界面,左側(cè)為各種控件,中間為程序設(shè)計(jì)的主窗口。由于一個計(jì)時器不需要太大的尺寸,故而可以直接拖動窗口右下角的三個點(diǎn),更改其尺寸。也可以定位到右側(cè)屬性欄的geometry
,展開后將寬度和高度分別設(shè)為400和200。
然后,將左側(cè)Buttons
下面的Push Button
拖動到主窗口,然后在右側(cè)可看到Push Button
的各種屬性。將QObject
中的objectName
改為pbStart
;將QAbstractButton
下的text
改為start
。一會兒用于開始計(jì)時。
在左側(cè)搜索LCD
,將LCD Number
拖動到主窗口,將名字改為Timer
,用于顯示時間。
此時,我們最左側(cè)的選項(xiàng)卡選中的是第三個設(shè)計(jì),若點(diǎn)擊第二個編輯,則可直接編輯窗口設(shè)計(jì)文件mainWindow.ui
,然而只是讓人看看,并不讓編輯。但總之,至此已寫完了一個簡單的UI
接下來,要實(shí)現(xiàn)計(jì)時器的核心功能——計(jì)時,從而需要寫c++
代碼。首先在.h
文件中,寫入需要的成員變量。考慮到要實(shí)現(xiàn)計(jì)時器的功能,所以至少需要一個用于計(jì)時的時鐘和一個可以記錄秒數(shù)的整數(shù)。故而進(jìn)入mainWindow.h
,在private:
下輸入成員,當(dāng)然也不要忘了導(dǎo)入頭文件,最終結(jié)果為
private: ? ? Ui::MainWindow *ui; ? ? QTimer * timer; ? ? QTime * TimeRecord;
除了成員變量,還要有成員函數(shù)。其中計(jì)時需要綁定一個函數(shù),start
按鈕需要綁定一個,外加時間歸零需要一個,故需三個成員函數(shù),最終mainWindow.h
內(nèi)容為
#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
中具體實(shí)現(xiàn)了,代碼總共不到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 ? ? //連接槽函數(shù),將timer的timeout行為,連接到updateTime函數(shù)中 ? ? connect(timer, SIGNAL(timeout()), this, SLOT(updateTime())); ? ? //當(dāng)點(diǎn)擊(clicked)pbStart時,調(diào)用函數(shù)pbStart_clicked ? ? connect(ui->pbStart, SIGNAL(clicked()), this, SLOT(pbStart_clicked())); } MainWindow::~MainWindow(){ ? ? delete ui; } void MainWindow::initTime(){ ? ? TimeRecord->setHMS(0, 0, 0); //時間復(fù)位為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")){ ? ? ? ? //當(dāng)按鈕內(nèi)容不為'stop'時,說明開啟計(jì)時 ? ? ? ? timer->start(1000); ? ? ? ? ui->pbStart->setText("stop");//計(jì)時開始后,按鈕變?yōu)?stop' ? ? }else{ ? ? ? ? timer->stop(); ? ? ? ? ui->pbStart->setText("start"); ? ? ? ? initTime(); ? ? } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法示例
這篇文章主要介紹了VC++實(shí)現(xiàn)添加文件關(guān)聯(lián)的方法,涉及VC++針對注冊表的寫入與VC事件響應(yīng)相關(guān)操作技巧,需要的朋友可以參考下2017-08-08Visual?Studio中的解決方案中不顯示項(xiàng)目分析
這篇文章主要為大家介紹了Visual?Studio中的解決方案中不顯示項(xiàng)目問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11虛函數(shù)被類的構(gòu)造析構(gòu)函數(shù)和成員函數(shù)調(diào)用虛函數(shù)的執(zhí)行過程
虛函數(shù)被類的構(gòu)造析構(gòu)函數(shù)和成員函數(shù)調(diào)用虛函數(shù)的執(zhí)行過程,需要的朋友可以參考下2013-02-02C語言動態(tài)分配二維字符串?dāng)?shù)組的方法
小編最近忙里偷閑,給大家整理一份教程關(guān)于C語言動態(tài)分配二維字符串?dāng)?shù)組的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-10-10Objective-C的內(nèi)省(Introspection)用法小結(jié)
這篇文章主要介紹了Objective-C的內(nèi)省(Introspection)用法,這是面向?qū)ο笳Z言和環(huán)境的一個強(qiáng)大特性,需要的朋友可以參考下2014-07-07