最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)簡(jiǎn)易秒表設(shè)計(jì)

 更新時(shí)間:2022年08月04日 12:43:30   作者:翟曉樹(shù)  
這篇文章主要為大家詳細(xì)介紹了Qt實(shí)現(xiàn)簡(jiǎn)易秒表設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

Qt–簡(jiǎn)易秒表設(shè)計(jì)(QTimer,Qtime,TableWiget應(yīng)用),供大家參考,具體內(nèi)容如下

效果圖

使用QTimer和QTime兩個(gè)類

思路:

1.計(jì)時(shí)功能:?

利用QTimer中的定時(shí)器中斷信號(hào),設(shè)置每10毫秒觸發(fā)一次timeout信號(hào),在對(duì)應(yīng)槽函數(shù)中對(duì)LCD number中顯示的時(shí)間進(jìn)行更新,即LCD屏中每十毫秒更新一次;對(duì)于時(shí)間的累加顯示(QTimer是定時(shí)器)需要Qtime,在每一次timeout信號(hào)出發(fā)時(shí),使Qtime類的time累加上10ms。

部分關(guān)鍵代碼如下(代碼并非連續(xù),只說(shuō)關(guān)鍵點(diǎn),源碼在末尾):

//.h文件中添加頭文件
#include <QTimer>
#include <QTime>

//聲明
? ? QTimer * m_Timer;?? ?//定時(shí)器,用來(lái)每10ms發(fā)出timeout信號(hào)
? ? QTime m_Time;?? ?//用來(lái)計(jì)時(shí)
? ? QTime showTime;?? ?//往lcd上顯示的時(shí)間

// .cpp文件里 構(gòu)造函數(shù)中進(jìn)行初始化 ?
?? ?m_Timer = new QTimer;
? ? m_Time.setHMS(0, 0, 0, 0);?? ?//

//設(shè)置timeout間隔10ms
?? ?m_Timer->start(10);

//每次timeout讓m_Time加10ms
?? ?connect(m_Timer, &QTimer::timeout, this, &app::updateDisplayTime);
?? ?//曹函數(shù)如下
?? ?void app::updateDisplayTime()
? ? {
? ? ? ? m_Time = m_Time.addMSecs(10);//計(jì)時(shí)器累加10ms
? ? ? ? QString tim = m_Time.toString("mm:ss.zzz");//時(shí)間轉(zhuǎn)換為字符串 ?? ??? ?
? ? ?? ?ui->lcdNumber_Timer->display(tim.left(tim.length() - 1));//將字符串最后一個(gè)0去掉
? ? }

時(shí)間的顯示與更新邏輯解決后,其次是如何使用***tableWiget***控件實(shí)現(xiàn)計(jì)次功能,以下簡(jiǎn)單介紹tableWiget使用與計(jì)次功能實(shí)現(xiàn):

//計(jì)次按鈕對(duì)應(yīng)的槽函數(shù)
?? ?int m_Row = 0;//行數(shù)
?? ?if(ui->pushButton_Count->text() == "計(jì)次")
? ? {
? ? ? ? QString tim = m_Time.toString("mm:ss.zzz");//獲取時(shí)間
? ? ? ? ui->tableWidget->insertRow(m_Row);//插入行,每次點(diǎn)擊計(jì)次都需要新加入一行?
? ? ? ? //每次新增一個(gè)格子(不是一行)都需要new一個(gè)QTableWigetitem
? ? ? ? ui->tableWidget->setItem(m_Row, 0, new QTableWidgetItem(tr("#%0").arg(m_Row+1)));//0行,0列為序號(hào)
? ? ? ? ui->tableWidget->setItem(m_Row, 1, new QTableWidgetItem("計(jì)次"));//0行,1列為動(dòng)作
? ? ? ? ui->tableWidget->setItem(m_Row, 2, new QTableWidgetItem(tim.left(tim.length() - 1)));//計(jì)次時(shí)間
? ? ? ? m_Row++;
? ? }

2.按鍵設(shè)計(jì)

?按下開(kāi)始按鈕后,開(kāi)始按鈕變?yōu)橥V梗?按下停止后停止變?yōu)槔^續(xù)并且計(jì)次變?yōu)閺?fù)位,,主要邏輯類似于iphone手機(jī)里的計(jì)時(shí)器,自己點(diǎn)點(diǎn)就明白了,主要是邏輯問(wèn)題,詳情見(jiàn)源碼:

3.源碼

(有很多地方可以單獨(dú)寫(xiě)成函數(shù)的,此處就先這樣吧,主要是總結(jié)思路,勿噴)

#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 << "序號(hào)" << "動(dòng)作" << "計(jì)次";
? ? ui->tableWidget->setColumnCount(3);
? ? ui->tableWidget->setHorizontalHeaderLabels(Header);
? ? //開(kāi)始,暫停,計(jì)次事件

? ? connect(m_Timer, &QTimer::timeout, this, &app::updateDisplayTime);
}

app::~app()
{
? ? delete ui;

}

//更新l'c'd中的時(shí)間
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));
}


// 開(kāi)始, 與 暫停, 判斷,如果按鈕名稱為開(kāi)始
void app::on_pushButton_Start_clicked()
{
? ? //qDebug() << "startBtn";

? ? //啟動(dòng)定時(shí)器,并設(shè)置timeout的中斷間隔為10毫秒
? ? if(ui->pushButton_Start->text() == "開(kāi)始") ? ?//按下時(shí)是開(kāi)始,開(kāi)始計(jì)時(shí),并且此按鍵變?yōu)橥V?
? ? {
? ? ? ? m_Timer->start(10);
? ? ? ? m_Row = 0;
? ? ? ? ui->tableWidget->clearContents();
? ? ? ? ui->tableWidget->setRowCount(0);
? ? ? ? ui->pushButton_Start->setText("停止");
? ? ? ? ui->pushButton_Count->setText("計(jì)次");
? ? }
? ? else if(ui->pushButton_Start->text() == "停止") ? //按下時(shí)是停止,停止計(jì)時(shí),并且按鍵變?yōu)槔^續(xù)
? ? {
? ? ? ? ui->pushButton_Start->setText("繼續(xù)");
? ? ? ? ui->pushButton_Count->setText("復(fù)位");

? ? ? ? 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("停止"));

? ? ? ? //按鈕為停止時(shí)按下,停止時(shí)間
? ? ? ? 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() == "繼續(xù)")
? ? {
? ? ? ? ui->pushButton_Start->setText("停止");
? ? ? ? ui->pushButton_Count->setText("計(jì)次");
? ? ? ? m_Timer->start(10);
? ? }
? ? else
? ? {
? ? ? ? return;
? ? }
}

//計(jì)次與復(fù)位
void app::on_pushButton_Count_clicked()
{
? ? if(ui->pushButton_Count->text() == "計(jì)次")
? ? {
? ? ? ? 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("計(jì)次"));
? ? ? ? ui->tableWidget->setItem(m_Row, 2, new QTableWidgetItem(tim.left(tim.length() - 1)));
? ? ? ? m_Row++;
? ? }
? ? else if(ui->pushButton_Count->text() == "復(fù)位") ? //復(fù)位時(shí)將另一個(gè)按鈕變?yōu)殚_(kāi)始
? ? {
? ? ? ? m_Time.setHMS(0,0,0,0);
? ? ? ? ui->lcdNumber_Timer->display("00:00.00");
? ? ? ? ui->pushButton_Start->setText("開(kāi)始");
? ? }
? ? else
? ? {
? ? ? ? return;
? ? }
}

text() == "復(fù)位") ? //復(fù)位時(shí)將另一個(gè)按鈕變?yōu)殚_(kāi)始
? ? {
? ? ? ? m_Time.setHMS(0,0,0,0);
? ? ? ? ui->lcdNumber_Timer->display("00:00.00");
? ? ? ? ui->pushButton_Start->setText("開(kāi)始");
? ? }
? ? else
? ? {
? ? ? ? return;
? ? }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++利用多態(tài)實(shí)現(xiàn)職工管理系統(tǒng)(項(xiàng)目開(kāi)發(fā))

    C++利用多態(tài)實(shí)現(xiàn)職工管理系統(tǒng)(項(xiàng)目開(kāi)發(fā))

    這篇文章主要介紹了C++利用多態(tài)實(shí)現(xiàn)職工管理系統(tǒng)(項(xiàng)目開(kāi)發(fā)),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • C++中左值引用,右值引用,萬(wàn)能引用的關(guān)系及區(qū)別說(shuō)明

    C++中左值引用,右值引用,萬(wàn)能引用的關(guān)系及區(qū)別說(shuō)明

    這篇文章主要介紹了C++中左值引用,右值引用,萬(wàn)能引用的關(guān)系及區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • C++智能指針之shared_ptr的具體使用

    C++智能指針之shared_ptr的具體使用

    本文主要介紹了C++智能指針之shared_ptr的具體使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>
    2022-05-05
  • Linux下C語(yǔ)言的幾道經(jīng)典面試題小結(jié)(分享)

    Linux下C語(yǔ)言的幾道經(jīng)典面試題小結(jié)(分享)

    下面小編就為大家?guī)?lái)一篇Linux下C語(yǔ)言的幾道經(jīng)典面試題小結(jié)(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • C++中的內(nèi)存分區(qū)介紹

    C++中的內(nèi)存分區(qū)介紹

    這篇文章主要介紹了C++中的內(nèi)存分區(qū)介紹,C++的內(nèi)存劃分為棧區(qū)、堆區(qū)、全局區(qū)/靜態(tài)區(qū)、字符串常量和代碼區(qū),本文分別對(duì)他們一一說(shuō)明,需要的朋友可以參考下
    2015-07-07
  • C語(yǔ)言拓展實(shí)現(xiàn)Lua sleep函數(shù)

    C語(yǔ)言拓展實(shí)現(xiàn)Lua sleep函數(shù)

    這篇文章主要介紹了C語(yǔ)言拓展實(shí)現(xiàn)Lua sleep函數(shù),本文使用C語(yǔ)言寫(xiě)出sleep函數(shù),編譯后在Lua中調(diào)用,需要的朋友可以參考下
    2015-04-04
  • c++中堆棧及創(chuàng)建對(duì)象示例代碼

    c++中堆棧及創(chuàng)建對(duì)象示例代碼

    這篇文章主要給大家詳細(xì)介紹了c++如何實(shí)現(xiàn)堆棧及創(chuàng)建對(duì)象,文中先進(jìn)行了簡(jiǎn)單的介紹,而后給出了詳細(xì)的示例代碼及注釋,相信對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2016-12-12
  • C語(yǔ)言線性表的鏈?zhǔn)奖硎炯皩?shí)現(xiàn)詳解

    C語(yǔ)言線性表的鏈?zhǔn)奖硎炯皩?shí)現(xiàn)詳解

    線性表的鏈?zhǔn)酱鎯?chǔ)特點(diǎn)則是用一組任意的存儲(chǔ)單元存儲(chǔ)線性表的數(shù)據(jù)元素。這組存儲(chǔ)單元既可以是連續(xù)的,也可以是不連續(xù)的。本文將詳解一下C語(yǔ)言線性表的鏈?zhǔn)奖硎炯皩?shí)現(xiàn),感興趣的可以了解一下
    2022-07-07
  • C語(yǔ)言新手入門之格式化輸出和變量類型

    C語(yǔ)言新手入門之格式化輸出和變量類型

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中格式化輸出和變量類型的相關(guān)資料,文中的教程非常適合新手零基礎(chǔ)的朋友們參考學(xué)習(xí),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • 解析static在C和C++中的用法以及區(qū)別

    解析static在C和C++中的用法以及區(qū)別

    以下是對(duì)static在C和C++中的用法以及區(qū)別進(jìn)行了詳細(xì)的分析介紹。需要的朋友可以過(guò)來(lái)參考下
    2013-08-08

最新評(píng)論

长宁县| 邹城市| 靖州| 乌兰县| 札达县| 西宁市| 常德市| 闵行区| 和龙市| 内乡县| 屯留县| 衡阳县| 巴彦淖尔市| 彰武县| 罗定市| 墨江| 仙桃市| 武清区| 航空| 同心县| 桃园市| 合肥市| 漯河市| 邻水| 通山县| 蓬莱市| 化德县| 花莲县| 绥滨县| 哈巴河县| 濉溪县| 渑池县| 黑山县| 梨树县| 沁水县| 都江堰市| 汤阴县| 昌乐县| 巴青县| 凌海市| 汕头市|