QT定时器之QTimer类加QTime类制作秒表

一、QTime时间类

QTime类提供时钟时间函数。
QTime对象包含一个时钟时间,即从午夜开始的小时、分钟、秒和毫秒数。它可以从系统时钟中读取当前时间,并测量运行时间的跨度。它提供了比较时间和通过添加若干毫秒来操作时间的函数。QTime使用24小时时钟格式;它没有上午/下午的概念

1. 头文件

#include <QTime>

2. QTime QTime::addMSecs(int ms) const
返回一个QTime对象,该对象的时间比该对象的时间晚ms毫秒(如果ms为负,则早ms)。
请注意,如果时间超过午夜,时间就会结束

3. QTime QTime::addSecs(int nsecs) const
返回一个QTime对象,该对象的时间比该对象的时间晚s秒(如果s为负数则早s秒)。
请注意,如果时间超过午夜,时间就会结束

4. 获取对象部分时间
int QTime::hour() const 返回时间对象的⼩,取值范围(0–23)
int QTime::minute() const 返回时间对象的钟,取值范围(0–59)
int QTime::second() const 返回时间对象的,取值范围(0–59)
int QTime::msec() const 返回时间对象的毫秒,取值范围(0–999)

5. bool QTime::isNull() const
如果时间对象等于00:00:00.000,则返回true;否则返回false

6. void QTime::start()
设置当前时间对象的值为当前系统时间

7. int QTime::restart()
将系统时间设置为当前时间,并返回自上次调用start()或restart()以来已经过的毫秒数。
如果计数器超出24⼩时,则设置当前时间为0

8. bool QTime::setHMS(int h, int m, int s, int ms = 0)
设置当前时间对象的时,分,秒和毫秒.如果给定的参数值有效,则返回true,否则返回false

9. QString QTime::toString(const QString &format) const
按照参数format指定的格式⽤字符串形式输出当前时间对象的时间
在这里插入图片描述
10. QTime QTime::currentTime()
返回一个值为当前的系统时间的对象

二、QTimer类

QTimer类提供了重复的单次定时器。要使用它,创建一个QTimer,将其超时()信号连接到适当的插槽,并调用start()。从那时起,它将以固定的间隔发出timeout() 信号

1. 头文件

#include <QTimer>

2. void QTimer::start()
(1)void QTimer::start()
启动或者重新启动定时器,其时间间隔是interval,可通过setInterval(int msec)函数进行设置

(2)void QTimer::start(int msec)
启动或者重新启动定时器,时间间隔单位是毫秒

3. void QTimer::stop()
结束一个定时器

4. void QTimer::singleShot(int msec, const QObject * receiver, const char * member)
这是个静态函数,能够在给定的时间间隔后调用槽,并不是多次触发该槽函数,该槽函数只执行一次。使用此函数非常方便,也不必创建本地QTimer对象

5. bool QTimer::isActive() const
如果定时器正在运行,返回true,否则返回false

6. void QTimer::changeInterval(int msec)
改变定时器时间间隔为msec毫秒。如果这个定时器信号是运行的,它将会被停止并且重新开始,否则它将会被开始

三、制作秒表

1. Widget类中设置timeout信号关联槽函数,初始化时间

connect(&timer, SIGNAL(timeout()), this, SLOT(timeout_slot()));
time.setHMS(0, 0, 0, 0); //设置时间为00:00:00:000
ui->timerShow->setText("00:00:000"); //显示到ui界面

2. 打开定时器(打开秒表)

void Widget::on_startBt_clicked()
{
    timer.start(1); //定时1毫秒
}

3. 读秒显示

void Widget::timeout_slot()
{
    time = time.addMSecs(1); //时间加1毫秒
    ui->timerShow->setText(time.toString("hh:mm:ss:zzz")); //显示到ui界面
}

4. 重置功能实现

void Widget::on_resetBt_clicked()
{
    timer.stop(); //关闭定时器
    time.setHMS(0, 0, 0, 0); //设置时间为00:00:00:000
    ui->timerShow->setText("00:00:000"); //显示到ui界面
    ui->bitEdit->setPlainText(""); //清空打点记录
}

5. 关闭定时器

void Widget::on_stopBt_clicked()
{
    timer.stop();
}

源码:
widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>
#include <QTime>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

    QTimer timer;
    QTime time;

private slots:
    void on_startBt_clicked();
    void timeout_slot();
    void on_stopBt_clicked();
    void on_resetBt_clicked();
    void on_bitBt_clicked();

private:
    Ui::Widget *ui;
};

#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    connect(&timer, SIGNAL(timeout()), this, SLOT(timeout_slot()));
    time.setHMS(0, 0, 0, 0); //设置时间为00:00:00:000
    ui->timerShow->setText("00:00:000"); //显示到ui界面
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_startBt_clicked()
{
    timer.start(1); //定时1毫秒
}

void Widget::timeout_slot()
{
    time = time.addMSecs(1); //时间加1毫秒
    ui->timerShow->setText(time.toString("hh:mm:ss:zzz")); //显示到ui界面
}

void Widget::on_stopBt_clicked()
{
    timer.stop(); //关闭计时器
}

void Widget::on_resetBt_clicked()
{
    timer.stop(); //关闭计时器
    time.setHMS(0, 0, 0, 0); //设置时间为0
    ui->timerShow->setText("00:00:000"); //显示到ui界面
    ui->bitEdit->setPlainText(""); //清空打点记录
}

void Widget::on_bitBt_clicked()
{
    if (timer.isActive()) //如果定时器在运行返回true
    {
        ui->bitEdit->appendPlainText(time.toString("hh:mm:ss:zzz"));
    }
}

效果:
在这里插入图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值