原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/artanis23/article/details/52207831
秒表是我们生活中必不可少的工具之一。本文就利用QTime,QTimer来实现秒表的功能。
1.初始化一个界面有一个QLabel,两个PushButton。一个Label–time_show来显示计时,一个QPushButton–begin显示“开始”,一个QPushButton–end显示“结束”。
2.初始化QTime类型的time_clock,QTimer类型的time_timer。
3.连接begin和成员函数timestart,end和成员函数timed。
4.timestart函数的编写
if(isstart==false){//如果暂停了
begin->setText("继续");
isstart=true;//下一次开始
time_timer->stop();//暂停计时
return;
}
else{
isstart=false;//下一次结束
begin->setText(tr("暂停"));
time_timer->start(47);//每47毫秒timeout一次
if(startagain==false){//如果是第一次
connect(time_timer,SIGNAL(timeout()),
this,SLOT(addtime()));//添加时间
startagain=true;
}
}
5.timeend函数的编写
time_timer->stop();//计时停止
begin->setText(tr("开始"));
time_clock->setHMS(0,0,0,0);//时间清空
time_show->setText(time_clock->toString("hh:mm:ss.zzz"));//设置成00:00:00.000的形式
isstart=true;
6.addtime函数的编写
*time_clock=time_clock->addMSecs(47);//添加四十七毫秒,若是更短则会导致延迟现象
time_show->setText(time_clock->toString("hh:mm:ss.zzz"));
这个项目也就完成了。
下面是完整代码:
timer1.h
#ifndef TIMER1_H
#define TIMER1_H
#include
#include
#include
class timer1 : public QDialog
{
Q_OBJECT
public:
timer1(QWidget *parent = 0);
~timer1();
QLabel *time_show;
QTime *time_clock;
QTimer *time_timer;
QPushButton *begin,*end;
QGroupBox *inputbox;
bool isstart=true,startagain=false;
public slots:
void create_input();
void addtime();
void timestart();
void timeend();
};
#endif // TIMER1_H
timer1.cpp
#include "timer1.h"
timer1::timer1(QWidget *parent)
: QDialog(parent)
{
setWindowTitle("计时器");
QVBoxLayout *mainlayout=new QVBoxLayout;
create_input();
mainlayout->addWidget(inputbox);
this->setLayout(mainlayout);
}
timer1::~timer1()
{
}
void timer1::create_input(){
inputbox=new QGroupBox;
QGridLayout *layout=new QGridLayout;
time_show=new QLabel;
time_clock=new QTime;
time_timer=new QTimer;
begin=new QPushButton(tr("开始"));
end=new QPushButton(tr("结束"));
time_show->setFixedSize(95,30);
begin->setFixedSize(80,50);
end->setFixedSize(80,50);
begin->setStyleSheet("color:red");
end->setStyleSheet("color:blue");
time_clock->setHMS(0,0,0,0);
time_show->setText(time_clock->toString("hh:mm:ss.zzz"));
layout->addWidget(time_show,0,0);
layout->addWidget(begin,1,0);
layout->addWidget(end,1,1);
inputbox->setLayout(layout);
connect(begin,&QPushButton::clicked,
this,&timer1::timestart);
connect(end,&QPushButton::clicked,
this,&timer1::timeend);
}
void timer1::timestart(){
if(isstart==false){
begin->setText("继续");
isstart=true;
time_timer->stop();
return;
}
else{
isstart=false;
begin->setText(tr("暂停"));
time_timer->start(47);
if(startagain==false){
connect(time_timer,SIGNAL(timeout()),
this,SLOT(addtime()));
startagain=true;
}
}
}
void timer1::timeend(){
time_timer->stop();
begin->setText(tr("开始"));
time_clock->setHMS(0,0,0,0);
time_show->setText(time_clock->toString("hh:mm:ss.zzz"));
isstart=true;
}
void timer1::addtime(){
*time_clock=time_clock->addMSecs(47);
time_show->setText(time_clock->toString("hh:mm:ss.zzz"));
}
希望对大家有多帮助