<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Qt–簡易秒錶設計(QTimer,Qtime,TableWiget應用),供大家參考,具體內容如下
使用QTimer和QTime兩個類
1.計時功能:
利用QTimer中的定時器中斷訊號,設定每10毫秒觸發一次timeout訊號,在對應槽函數中對LCD number中顯示的時間進行更新,即LCD屏中每十毫秒更新一次;對於時間的累加顯示(QTimer是定時器)需要Qtime,在每一次timeout訊號出發時,使Qtime類的time累加上10ms。
部分關鍵程式碼如下(程式碼並非連續,只說關鍵點,原始碼在末尾):
//.h檔案中新增標頭檔案 #include <QTimer> #include <QTime> //宣告 QTimer * m_Timer; //定時器,用來每10ms發出timeout訊號 QTime m_Time; //用來計時 QTime showTime; //往lcd上顯示的時間 // .cpp檔案裡 建構函式中進行初始化 m_Timer = new QTimer; m_Time.setHMS(0, 0, 0, 0); // //設定timeout間隔10ms m_Timer->start(10); //每次timeout讓m_Time加10ms connect(m_Timer, &QTimer::timeout, this, &app::updateDisplayTime); //曹函數如下 void app::updateDisplayTime() { m_Time = m_Time.addMSecs(10);//計時器累加10ms QString tim = m_Time.toString("mm:ss.zzz");//時間轉換為字串 ui->lcdNumber_Timer->display(tim.left(tim.length() - 1));//將字串最後一個0去掉 }
時間的顯示與更新邏輯解決後,其次是如何使用***tableWiget***控制元件實現計次功能,以下簡單介紹tableWiget使用與計次功能實現:
//計次按鈕對應的槽函數 int m_Row = 0;//行數 if(ui->pushButton_Count->text() == "計次") { QString tim = m_Time.toString("mm:ss.zzz");//獲取時間 ui->tableWidget->insertRow(m_Row);//插入行,每次點選計次都需要新加入一行 //每次新增一個格子(不是一行)都需要new一個QTableWigetitem ui->tableWidget->setItem(m_Row, 0, new QTableWidgetItem(tr("#%0").arg(m_Row+1)));//0行,0列為序號 ui->tableWidget->setItem(m_Row, 1, new QTableWidgetItem("計次"));//0行,1列為動作 ui->tableWidget->setItem(m_Row, 2, new QTableWidgetItem(tim.left(tim.length() - 1)));//計次時間 m_Row++; }
2.按鍵設計
按下開始按鈕後,開始按鈕變為停止, 按下停止後停止變為繼續並且計次變為復位,,主要邏輯類似於iphone手機裡的計時器,自己點點就明白了,主要是邏輯問題,詳情見原始碼:
3.原始碼
(有很多地方可以單獨寫成函數的,此處就先這樣吧,主要是總結思路,勿噴)
#ifndef APP_H #define APP_H #include <QWidget> #include <QTimer> #include <QTime> QT_BEGIN_NAMESPACE namespace Ui { class app; } QT_END_NAMESPACE class app : public QWidget { Q_OBJECT public: app(QWidget *parent = nullptr); ~app(); private slots: void on_pushButton_Start_clicked(); void on_pushButton_Count_clicked(); private: Ui::app *ui; QTimer * m_Timer; QTime m_Time; QTime showTime; int m_Row; public: void updateDisplayTime(); }; #endif // APP_H
#include "app.h" #include "ui_app.h" #include <QDebug> app::app(QWidget *parent) : QWidget(parent) , ui(new Ui::app) { ui->setupUi(this); m_Timer = new QTimer; m_Time.setHMS(0, 0, 0, 0); m_Row = 0; //初始化顯示 ui->lcdNumber_Timer->display("00:00.00"); QStringList Header; Header << "序號" << "動作" << "計次"; ui->tableWidget->setColumnCount(3); ui->tableWidget->setHorizontalHeaderLabels(Header); //開始,暫停,計次事件 connect(m_Timer, &QTimer::timeout, this, &app::updateDisplayTime); } app::~app() { delete ui; } //更新l'c'd中的時間 void app::updateDisplayTime() { qDebug() << "timeout"; QString tim = m_Time.toString("mm:ss.zzz"); m_Time = m_Time.addMSecs(10); ui->lcdNumber_Timer->display(tim.left(tim.length() - 1)); } // 開始, 與 暫停, 判斷,如果按鈕名稱為開始 void app::on_pushButton_Start_clicked() { //qDebug() << "startBtn"; //啟動定時器,並設定timeout的中斷間隔為10毫秒 if(ui->pushButton_Start->text() == "開始") //按下時是開始,開始計時,並且此按鍵變為停止 { m_Timer->start(10); m_Row = 0; ui->tableWidget->clearContents(); ui->tableWidget->setRowCount(0); ui->pushButton_Start->setText("停止"); ui->pushButton_Count->setText("計次"); } else if(ui->pushButton_Start->text() == "停止") //按下時是停止,停止計時,並且按鍵變為繼續 { ui->pushButton_Start->setText("繼續"); ui->pushButton_Count->setText("復位"); ui->tableWidget->insertRow(m_Row); ui->tableWidget->setItem(m_Row, 0, new QTableWidgetItem(tr("#%0").arg(m_Row+1))); ui->tableWidget->setItem(m_Row, 1, new QTableWidgetItem("停止")); //按鈕為停止時按下,停止時間 m_Timer->stop(); QString tim = m_Time.toString("mm:ss.zzz"); ui->tableWidget->setItem(m_Row, 2, new QTableWidgetItem(tim.left(tim.length() - 1))); m_Row++; } else if(ui->pushButton_Start->text() == "繼續") { ui->pushButton_Start->setText("停止"); ui->pushButton_Count->setText("計次"); m_Timer->start(10); } else { return; } } //計次與復位 void app::on_pushButton_Count_clicked() { if(ui->pushButton_Count->text() == "計次") { QString tim = m_Time.toString("mm:ss.zzz"); ui->tableWidget->insertRow(m_Row); ui->tableWidget->setItem(m_Row, 0, new QTableWidgetItem(tr("#%0").arg(m_Row+1))); ui->tableWidget->setItem(m_Row, 1, new QTableWidgetItem("計次")); ui->tableWidget->setItem(m_Row, 2, new QTableWidgetItem(tim.left(tim.length() - 1))); m_Row++; } else if(ui->pushButton_Count->text() == "復位") //復位時將另一個按鈕變為開始 { m_Time.setHMS(0,0,0,0); ui->lcdNumber_Timer->display("00:00.00"); ui->pushButton_Start->setText("開始"); } else { return; } } text() == "復位") //復位時將另一個按鈕變為開始 { m_Time.setHMS(0,0,0,0); ui->lcdNumber_Timer->display("00:00.00"); ui->pushButton_Start->setText("開始"); } else { return; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45