Qt小项目(3):秒表计时

原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和本声明。否则将追究法律责任。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"));

这个项目也就完成了。

程序效果如下:
Qt小项目(3):秒表计时_第1张图片

下面是完整代码:
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"));
}

希望对大家有多帮助

你可能感兴趣的:(Qt,--Qt小项目)