目錄Qt 學習筆記全系列傳送門:
Qt 學習筆記 - 第一章 - 快速開始、信號與槽
Qt 學習筆記 - 第二章 - 添加圖片、布局、界面切換
Qt 學習筆記 - 第三章 - Qt的三駕馬車之一 - 串口編程 + 程式打包成Windows軟體
Qt 學習筆記 - 第四章 - Qt的三駕馬車之二 - 網路編程
【本章】Qt 學習筆記 - 第五章 - Qt 時間編程 - Qt 時鐘
- 1、UI
- 2、邏輯實作
1、UI
- 時間顯示:使用QLabel,顯示時間
- 開始按鈕:開始計時
- 停止按鈕:停止計時
- 重置按鈕:計時歸零
- 打點按鈕:記錄時刻
- 顯示框:使用QTextBowser,顯示記錄的時刻
2、邏輯實作
-
頭檔案
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QTimer> #include <QTime> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); // 在本節內容中,本質上是作為一種定時任務 QTimer localTimer; QTimer timer; // 真正的時間 QTime localTime; QTime time; private slots: void on_startBt_clicked(); void timeout_slot(); void on_resetBt_clicked(); void on_stopBt_clicked(); void on_bitBt_clicked(); private: Ui::Widget *ui; // 用于打點計數 int i; }; #endif // WIDGET_H -
初始化
獲取當前時間并展示到頁面的信號與槽關聯可以理解為槽函式是一個匿名函式,[]是要傳入槽函式中需要使用到的內容的陣列[]中的內容可以傳this,即[this],包含頭檔案中定義的全部內容- 若非頭檔案中定義的內容,則不能只傳
this,如代碼中的j也需要使用的話,需要傳入[this, j],當然,也可以直接傳[=],這里的=是this的超集,包含頭檔案和.cpp檔案中定義的所有內容
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); // 創建視窗時先對秒表進行一次初始化 this->on_resetBt_clicked(); // 每30毫秒觸發信號,用于本地時間的重繪 localTimer.start(30); // int j = 0; // 獲取當前時間并展示到頁面,使用方法詳見上方注釋 connect(&localTimer, &QTimer::timeout, this, [=](){ localTime = QTime::currentTime(); ui->localTime->setText(localTime.toString("hh:mm:ss:zzz")); }); // 設定監聽,監聽到定時信號時,呼叫槽函式,增加秒表的時間 connect(&timer, SIGNAL(timeout()), this, SLOT(timeout_slot())); } -
開始計時與計時程序
void Widget::on_startBt_clicked() { // 每30毫秒觸發信號timeout() timer.start(30); } void Widget::timeout_slot() { //qDebug("test"); // 秒表增加的時間與定時信號的間隔時間相同 time = time.addMSecs(30); ui->showTime->setText(time.toString("hh:mm:ss:zzz")); } -
停止計時
void Widget::on_stopBt_clicked() { // 停止定時任務,即停止秒表 timer.stop(); } -
打點
void Widget::on_bitBt_clicked() { QString tmp; tmp.sprintf("%d", ++i); ui->showBit->append(tmp); ui->showBit->append(time.toString("hh:mm:ss:zzz")); } -
重置計時
void Widget::on_resetBt_clicked() { // 先關閉計時 this->on_stopBt_clicked(); // 重置時間為0并顯示到頁面 time.setHMS(0, 0, 0, 0); ui->showTime->setText("00:00:00:000"); // 打點的初始化 i = 0; ui->showBit->clear(); }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546962.html
標籤:其他
上一篇:關于EasyExcel的資料匯入和單sheet和多sheet匯出
下一篇:C++ 建構式和解構式
