QT开发(五)—— 项目实战:秒表,QTime,Qtimer的使用
我们继续QT之旅,这次写的依旧是个小东西,那就是秒表,这个秒表主要还是逻辑操作,实际上本身并没有多少内容,也就是学习了一下QTime和QTimer的使用,我们来看下UI是什么样子的
这里就很简单了,我们先分析一下控件,最上面是一个QLCDNumber用来显示秒数,中间四个按钮用来控制,下面就是一个记录时间点的逻辑,控件使用的是QTextBrowser,好的,我们来看下头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTime>
#include <QTimer>namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();public:void init();private slots:void updateDisplay();void on_btn_start_clicked();void on_btn_stop_clicked();void on_btn_pause_clicked();void on_btn_point_clicked();private:Ui::MainWindow *ui;QTimer *pTimer;QTime baseTime;//显示的时间QString timeStr;
};#endif // MAINWINDOW_H
可以看到,我就定义了一个公共函数init用来初始化一些数据,五个槽函数,分别是四个按钮以及一个倒计时的槽函数,又定义了一些变量,其中timeStr是显示在LCD上的最终文字,好的,我们来开始分析吧
//初始化
void MainWindow::init()
{//默认显示this->ui->lcd_play->display("00:00:00:000");this->pTimer = new QTimer;//绑定定时器的信号connect(this->pTimer,SIGNAL(timeout()),this,SLOT(updateDisplay()));
}
首先就是我们在初始化中先定义了需要显示的格式为00:00:00:000,因为我们只能通过代码才能这样设置,其次就是定义一个信号为timeout的定时器了
//开始
void MainWindow::on_btn_start_clicked()
{//获取当前时间this->baseTime = this->baseTime.currentTime();this->pTimer->start(1);//重置状态if(this->ui->btn_stop->text() != "停止"){this->ui->btn_stop->setText("停止");}if(this->ui->btn_pause->text() != "暂停"){this->ui->btn_pause->setText("暂停");}
}
然后我们点击开始的槽函数后,我们获取了当前的时间并且设置在baseTime上,以及重置了一下其他按钮的状态
//结束
void MainWindow::on_btn_stop_clicked()
{if(this->ui->btn_stop->text() == "停止"){this->ui->btn_stop->setText("清空");this->pTimer->stop();}else if(this->ui->btn_stop->text() == "清空"){this->ui->btn_stop->setText("停止");this->ui->tb_display->clear();this->ui->lcd_play->display("00:00:00:000");}}
我们在结束的时候有两个状态,停止就直接调用timer指针的stop,清除的话就恢复下状态
//暂停
void MainWindow::on_btn_pause_clicked()
{static QTime pauseTime;if(this->ui->btn_pause->text() == "暂停"){pauseTime = QTime::currentTime();this->ui->btn_pause->setText("继续");this->pTimer->stop();}else if(this->ui->btn_pause->text() == "继续"){//进行差值计算QTime cut = QTime::currentTime();int t = pauseTime.msecsTo(cut);this->baseTime = this->baseTime.addMSecs(t);this->ui->btn_pause->setText("暂停");this->pTimer->start();}
}
我们在暂停这里,首先是定义了一个pauseTime用来获取你点击的时间,然后再调用stop,如果你再次按了继续的话,我会拿我保存的pauseTime与上一个baseTime作比较然后添加上去来弥补这个时间差,最后再调用start函数
//打点
void MainWindow::on_btn_point_clicked()
{//将timeStr添加到列表this->ui->tb_display->append(this->timeStr );
}
打点就比较简单了,直接添加上去即可
对应的槽函数里更新时间
//更新时间
void MainWindow::updateDisplay()
{/** 1.点击开始后获取到当前的时间并且赋值给baseTime* 2.启动定时器,间隔1s* 3.槽函数中再次获取当前的时间currTime* 4.计算两个时间的差值t* 5.声明一个showTime对象给他加上t的差值* 6.格式化后设置显示*/QTime currTime = QTime::currentTime();int t = this->baseTime.msecsTo(currTime);QTime showTime(0,0,0,0);showTime = showTime.addMSecs(t);this->timeStr = showTime.toString("hh:mm:ss:zzz");this->ui->lcd_play->display(timeStr);
}
也是同样的使用计算差值的方式去弥补
好的,我们来看下全部代码
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);this->init();
}MainWindow::~MainWindow()
{delete this->pTimer;delete ui;
}
//初始化
void MainWindow::init()
{//默认显示this->ui->lcd_play->display("00:00:00:000");this->pTimer = new QTimer;//绑定定时器的信号connect(this->pTimer,SIGNAL(timeout()),this,SLOT(updateDisplay()));
}//开始
void MainWindow::on_btn_start_clicked()
{//获取当前时间this->baseTime = this->baseTime.currentTime();this->pTimer->start(1);//重置状态if(this->ui->btn_stop->text() != "停止"){this->ui->btn_stop->setText("停止");}if(this->ui->btn_pause->text() != "暂停"){this->ui->btn_pause->setText("暂停");}
}
//结束
void MainWindow::on_btn_stop_clicked()
{if(this->ui->btn_stop->text() == "停止"){this->ui->btn_stop->setText("清空");this->pTimer->stop();}else if(this->ui->btn_stop->text() == "清空"){this->ui->btn_stop->setText("停止");this->ui->tb_display->clear();this->ui->lcd_play->display("00:00:00:000");}}
//暂停
void MainWindow::on_btn_pause_clicked()
{static QTime pauseTime;if(this->ui->btn_pause->text() == "暂停"){pauseTime = QTime::currentTime();this->ui->btn_pause->setText("继续");this->pTimer->stop();}else if(this->ui->btn_pause->text() == "继续"){//进行差值计算QTime cut = QTime::currentTime();int t = pauseTime.msecsTo(cut);this->baseTime = this->baseTime.addMSecs(t);this->ui->btn_pause->setText("暂停");this->pTimer->start();}
}
//打点
void MainWindow::on_btn_point_clicked()
{//将timeStr添加到列表this->ui->tb_display->append(this->timeStr);
}
//更新时间
void MainWindow::updateDisplay()
{/** 1.点击开始后获取到当前的时间并且赋值给baseTime* 2.启动定时器,间隔1s* 3.槽函数中再次获取当前的时间currTime* 4.计算两个时间的差值t* 5.声明一个showTime对象给他加上t的差值* 6.格式化后设置显示*/QTime currTime = QTime::currentTime();int t = this->baseTime.msecsTo(currTime);QTime showTime(0,0,0,0);showTime = showTime.addMSecs(t);this->timeStr = showTime.toString("hh:mm:ss:zzz");this->ui->lcd_play->display(timeStr);
}
再来看下效果
好的,最后送上源码:点击下载
有兴趣的可以加群:690351511
QT开发(五)—— 项目实战:秒表,QTime,Qtimer的使用相关推荐
- Android零基础开发到项目实战
Android零基础开发到项目实战(目录) 前言:本教程适合零基础学习安卓开发的伙伴,下面是目录,本博主会每天定时更新每一章节的教程,未完..... 一.Java基础阶段 day01_Java语言概述 ...
- python爬虫项目实例-Python爬虫开发与项目实战
Python爬虫开发与项目实战(高清版)PDF 百度网盘 链接:https://pan.baidu.com/s/1MFexF6S4No_FtC5U2GCKqQ 提取码:gtz1 复制这段内容后打开百度 ...
- python爬虫开发环境_python爬虫开发教程下载|Python爬虫开发与项目实战(范传辉 著)pdf 完整版_ - 极光下载站...
Python爬虫开发与项目实战pdf扫描版下载.Python爬虫开发是一个Pthyon编程语言与HTML基础知识引领读者入门知识,重点讲述了云计算的相关内容及其在爬虫中的应用,进而介绍如何设计自己的爬 ...
- 《Python爬虫开发与项目实战》——第3章 初识网络爬虫 3.1 网络爬虫概述
本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第3章,第3.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第3章 初识网 ...
- 《Python爬虫开发与项目实战》——1.6 小结
本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第1章,第1.6节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 1.6 小结 ...
- 《Python爬虫开发与项目实战》——第1章 回顾Python编程 1.1 安装Python
本节书摘来自华章计算机<Python爬虫开发与项目实战>一书中的第1章,第1.1节,作者:范传辉著,更多章节内容可以访问云栖社区"华章计算机"公众号查看 第1章 回顾P ...
- Python编程:从入门到实践+爬虫开发与项目实战+网络编程基础+项目开发实战
给还在苦苦自学Python的小伙伴们分享一波学习教程~有了它们,至少能节省50%的时间,少走一半的弯路. 书不在多,而在于精~ <Python编程:从入门到实践>豆瓣评分9.2 本书是针对 ...
- 【创科之龙】零基础学习嵌入式开发以及项目实战开发【第二期视频】
[创科之龙]零基础学习嵌入式开发以及项目实战开发[学习交流零基础火热进行ing] 大家好,我是aiku,上期的项目学习资料在电子发烧友论坛上分享,大家觉得都很好. 在这里我首先要感谢电子发烧友给我们的 ...
- Java高级开发0-1项目实战-青鸟商城-Day03
作者:田超凡 原创博文,严禁复制转载,仿冒必究 项目计划 第三天: 前台系统搭建 商城首页展示 Cms系统的实现 内容分类管理 内容管理 前台内容动态展示 1. 商城首页展示 系统架构: 页面位置: ...
- 【源码及课件分享】Java实战项目之酒店客房管理系统_Java项目开发_Java项目实战
Java实战项目又双叒叕来咯~小伙伴们请查收~酒店客房管理系统![源码及课件分享]Java实战项目之酒店客房管理系统_Java项目开发_Java项目实战_Java毕业设计https://www.bil ...
最新文章
- 重磅!腾讯发布AI生态计划将赋能1000合作伙伴!
- 《数据挖掘导论》实验课——实验一、数据处理之Numpy
- LogStash 中字段的排除和数据的排除
- 论文笔记-Augmented Lagrange Multiplier Method for Recovery of Low-Rank Matrices
- 电商系统的售后模块设计
- java api项目配置统一的错误返回json提示
- 【电信增值业务学习笔记】3 语音类增值业务
- hawq state 报错: the database is down, but Ambari shows all hawq services as being
- CentOS系统Tomcat 8.5/9部署SSL证书
- TFS报表管理器无权限访问的配置
- @babel/polyfill按需加载
- zk选举机制和分布式一致性原理
- 初识EMC元器件(四)——共模电感选型及应用
- 计算机组成原理 启航教育,2021计算机考研:计算机组成原理知识点CPU的功能和基本结构...
- Comparator--比较器
- Testlink使用文档
- Ubuntu安装re2c和ninja
- 计算机辅助设计与制造考试题,计算机辅助设计与制造试题.docx
- Python爬虫随笔:爬取iciba上的单词发音文件
- JS三种等号的区别(=、==、===)