利用QT设计秒表功能
本文实例为大家分享了QT设计秒表功能的具体代码,供大家参考,具体内容如下
一、窗口界面的设置可以使用属性栏digitCount来设计此时0的初始位置
二、代码的编写1、确定时间->每间隔一秒调用一个update函数(进行换算)或者直接调用QT里面的time类;
2、确定显示的方式;
3、每间隔一段时间调用显示来达到动态效果;
4、这里应该查看Qtime/Qlcd的help手册
5、在对定时器声明时要注意需要声明成指针,后面的槽函数发出信号者要求是指针类型;
6、利用基准时间与当前时间的差值来显示计时器;
7、设置暂停键的时候需要注意的是,可以给按键设置两个功能,分别是暂停和继续形成一个循环,但是需要注意是,当我们暂停后再继续这段时间也是计算在内的,当再次显示的时候,这时将会出现跳跃,这是因为我们显示时间的时候用的是当前时间与基准时间的差值来计算的。解决的办法是:
获取暂停前和暂停后的值,保存下来,当再次开始计算时减去这部分时间即可。
8、还有注意设置每个按键的可用性(Enabled)
代码如下:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <Qtimer>
#include <Qtime>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void updateTimeAndDisplay(); //槽函数
void on_btn_start_clicked();
void on_btn_stop_clicked();
void on_btn_pause_clicked();
void on_btn_log_clicked();
private:
Ui::MainWindow *ui;
QTimer *qtimer; //声明一个定时器对象,声明成指针对象
QTime baseTime; //声明一个时间对象
QString showStr; //直接声明
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->qtimer = new QTimer; //实例构造
connect(this->qtimer,SIGNAL(timeout()),this,SLOT(updateTimeAndDisplay()));
}
MainWindow::~MainWindow()
{
delete ui;
}
//计算基准时间和当前时间的差值来显示秒表值(currentTime)
void MainWindow::updateTimeAndDisplay()
{
QTime current = QTime::currentTime();
int temp = this->baseTime.msecsTo(current); //计算差值
QTime showTime(0,0,0,0);
showTime = showTime.addMSecs(temp);
showStr = showTime.toString("hh:mm:ss:zzz"); //时间转换为字符串
this->ui->lcdNumber->display(showStr);
}
void MainWindow::on_btn_start_clicked()
{
this->baseTime = QTime::currentTime();
this->qtimer->start(1);
this->ui->btn_start->setEnabled(false); //设置按键的可用性
}
void MainWindow::on_btn_stop_clicked()
{
if(this->ui->btn_stop->text() == "停止"){
this->ui->btn_stop->setText("清零");
this->qtimer->stop();
this->ui->btn_start->setEnabled(false);
this->ui->btn_pause->setEnabled(false);
}else
{
this->ui->lcdNumber->display("00:00:00:000");
this->ui->textBrowser->clear();
this->ui->btn_stop->setText("停止");
this->ui->btn_start->setEnabled(true);
this->ui->btn_pause->setEnabled(true);
}
}
//获取暂停前后的值求差值
void MainWindow::on_btn_pause_clicked()
{
static QTime pauseTime;
if(this->ui->btn_pause->text() == "暂停"){
pauseTime = QTime::currentTime();
this->qtimer->stop();
this->ui->btn_pause->setText("继续");
this->ui->btn_start->setEnabled(false);
this->ui->btn_stop->setEnabled(false);
}else
{
QTime cut = QTime::currentTime();
int t = pauseTime.msecsTo(cut); //求差值
this->baseTime = baseTime.addMSecs(t); //把暂停时间再给baseTime
this->qtimer->start(1);
this->ui->btn_pause->setText("暂停");
this->ui->btn_start->setEnabled(true);
this->ui->btn_stop->setEnabled(true);
}
}
void MainWindow::on_btn_log_clicked()
{
this->ui->textBrowser->append(showStr); //这里如果使用settext()将会覆盖信息,不能追加显示
}
相关内容
-
i3/i5的劲敌A8-3870K黑盒版
i3/i5的劲敌A8-3870K黑盒版,,在a6-3670k评价,我们觉得超频系列G...
-
华硕电脑系统win10|华硕电脑系统win10系统
华硕电脑系统win10|华硕电脑系统win10系统,,华硕电脑系统win10...
-
怎么设置电脑桌面|怎么设置电脑桌面壁纸
怎么设置电脑桌面|怎么设置电脑桌面壁纸,,怎么设置电脑桌面壁...
-
电脑测试手机的软件|电脑上测试手机用什么软件
电脑测试手机的软件|电脑上测试手机用什么软件好,,电脑上测试...
-
怎么用麦克风在电脑上唱歌|电脑如何用麦克风唱
怎么用麦克风在电脑上唱歌|电脑如何用麦克风唱歌,,1. 电脑如何...
-
678元的索泰zt-h55d3-m1dh主板
678元的索泰zt-h55d3-m1dh主板,,近日,索泰zt-h55d3-m1dh主板已...
-
键盘上的快捷键截图|电脑键盘上的截图快捷键
键盘上的快捷键截图|电脑键盘上的截图快捷键,,1. 电脑键盘上的...
-
学习写字楼新选择6000元主流配置
学习写字楼新选择6000元主流配置,,这种配置需要考虑双核心的办...
-
电脑麦克风说不了话了|电脑内置麦克风说不了话
电脑麦克风说不了话了|电脑内置麦克风说不了话怎么办,,1. 电脑...
-
硬盘库存迫切需要通过西方数据,三星已经停止向零
硬盘库存迫切需要通过西方数据,三星已经停止向零售商发送硬盘...
-
三千元推荐买什么笔记本电脑,打英雄联盟不卡很流
三千元推荐买什么笔记本电脑,打英雄联盟不卡很流畅,不玩吃鸡,笔...
-
金蝶专业版审核以前期间的单据
金蝶专业版审核以前期间的单据,,1.之前会计是手工做账,现在是...
-
excel怎么用乘法函数
excel怎么用乘法函数,乘法,函数,哪个,excel乘法函数怎么用?1、...
-
为什么金蝶计提折旧用不了|金蝶软件固定资产折
为什么金蝶计提折旧用不了|金蝶软件固定资产折旧管理怎么用,,1...
-
金蝶担保机构业务管理系统
金蝶担保机构业务管理系统,,1.金蝶财务软件怎么使用?软件使用...