QT-实现实时时间、计时器

一、显示效果

        1.显示实时时间

        2.实现计时、暂停、重置、打点

二、使用库、函数

        需要使用下面这两个库其中QTime是代表事件类的,比如获取现在的时间,或者时间增加,QTimer是定时器类的函数,其中包含了开始定时,暂停定时等。

#include <QTime>
#include <QTimer>

        使用函数:

        设置时间值:setHMS(int h, int m, int s, int ms),元素代表小时、分、秒、毫秒

        获取现在时间:QTime::currentTime();

        开启定时器计时start(30);计时30ms,每到30ms会触发信号timeout()

        增加时间值:addMSecs(30);

        暂停定时器:stop();

        其他函数: buf = buf.asprintf("%d:",i);,i是一个int类型变量,将其转换为buf所在类型变量,比如这里的buf是QString类型,因此就是把i变为QString类型

三、ui界面的实现

        

        其中现在时间和计时器时间显示界面用的是label组件,label组件也可以进行写入,使用函数setText()

ui ->timertxt->setText(qtime->toString("hh:mm:ss:zzz"));

        显示框用的是Plain Text Edit需要选择readonly,其余按钮采用pushbuttton

四、 逻辑功能实现

        4.1实时时间显示

        在头文件中定义:

    QTime *qtime;
    QTime *current_time;
    QTimer *qtimer;
    QTimer *current_timer;

        在Widget的构造函数中我们初始化一个current_time = new QTime和current_timer =new QTimer分别作为现在时间值和现在时间用的定时器,这里我们将*current_time赋值为现在时间,并开启现在时间定时器

    *current_time = QTime::currentTime();
    current_timer->start(30);

        然后将现在时间显示到ui上

    ui ->nowtimetxt->setText(current_time->toString("hh:mm:ss"));

        使用setText将时间转化为String格式并且是“hh:mm:ss”就是10:50:30代表10点50分30秒

        这时我们将timeout()信号量关联到其槽函数,以便于更新我们的实时时间

    connect(current_timer,SIGNAL(timeout()),this,SLOT(now_time_SLOT()));

        我们需要将槽函数now_time_SLOT()函数放在头文件的private slots:中,因为这是手动关联的槽函数,自动关联的槽函数系统会帮我们自动放入

        下面是我们的槽函数,就是每30ms进入中断槽函数的时候我们只需要将*current_time增加30ms即可,因为这是特殊的类型并不是int,因此我们不能直接加减而是使用其库提供的函数,然后将新的数值更新在显示界面即可

void Widget::now_time_SLOT()
{
    *current_time = current_time->addMSecs(30);
    ui->nowtimetxt->setText(current_time->toString("hh:mm:ss"));
}

4.2 计数器功能开始、暂停

        与上述实时时间显示功能类似,也是通过显示初始值,开启定时器,增加时间,再显示来完成的,不同的就是这里开启定时器在开始按键的槽函数中实现。

        先将初始时间设置为0,0,0,0,然后显示到界面,然后关联槽函数

    qtime ->setHMS(0,0,0,0);
    //label使用setText来设置
    ui->timertxt->setText("00:00:00:00");
    //设置定时器槽函数
    connect(qtimer,SIGNAL(timeout()),this,SLOT(timeout_slot()));

        这里我们只需要将开关按键槽函数分别设置为开关定时器即可,当定时器时间到达,上述槽函数会触发,然后再对时间进行增加,更新即可

void Widget::on_startbt_clicked()
{
    qtimer->start(30);
}

void Widget::on_stopbt_clicked()
{
    qtimer->stop();
}
void Widget::timeout_slot()
{
    *qtime = qtime->addMSecs(30);
    ui ->timertxt->setText(qtime->toString("hh:mm:ss:zzz"));

}

        4.3 重置

        首先我们暂停定时器,然后将显示值清零即可,这里我们把后面打点的界面也清除了

void Widget::on_resetbt_clicked()
{
    qtimer->stop();
    qtime ->setHMS(0,0,0,0);
    ui ->timertxt->setText(qtime->toString("hh:mm:ss:zzz"));
    ui->plainTextEdit->clear();

}

        4.4打点

        打点操作为了记录现在是打的第几个点、打点的相对时间

void Widget::on_bitbt_clicked()
{
    i++;
    QString buf;
    buf = buf.asprintf("%d:",i);
    ui ->plainTextEdit->appendPlainText(buf);
    ui->plainTextEdit->appendPlainText(qtime->toString("hh:mm:ss:zzz"));
}

  • 13
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值