如何自学qt(10)——计时器

这篇博客介绍了如何在Qt环境中利用QTimer类创建和管理多个计时器。通过重写timerEvent函数,实现了计时器每间隔不同时间更新界面上的标签内容。同时,展示了如何通过timerId来区分不同的计时器,并通过信号槽机制实现计时器的启动、停止,以及添加了一个0.5秒更新一次的计时器。这为Qt应用中的时间控制提供了灵活的方法。
摘要由CSDN通过智能技术生成

学了这个就能玩时限梗了
首先查个文档(注意,选类的时候选QTimer)
在这里插入图片描述
和(9)中鼠标事件类似的身影
在这里插入图片描述
因为这个没有进入进出的问题,所以我们可以直接在主窗体里面实现
首先,在.h文件中声明一下,我们要重写这个函数了

//mainwindow.h
public:
    void timerEvent(QTimerEvent *e);//就是把帮助文档复制过去

在.cpp文件中重写函数

//mainwindow.cpp
void MainWindow::timerEvent(QTimerEvent *e)
{
    static int num = 1;//为什么用静态函数,后面会解释
    ui->label_2->setText(QString::number(num++));
}

现在计时器有了,但是没有开关,于是我们在主函数中写上它的开关

//mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    startTimer(1000);//参数1000指每隔1000毫秒调用一次事件函数
}

看这个startTimer函数的解释
因为它是每次重新调用事件函数,所以如果不加static,计时器每次都会从1开始,界面不会发生变化。
之后,我们提升需求,如何弄两个计时器呢?
首当其冲(这成语好像用的不对)是重写的事件触发函数,我们在里面加上关于label_3的部分

//mainwindow.cpp
void MainWindow::timerEvent(QTimerEvent *e)
{
    static int num = 1;
    ui->label_2->setText(QString::number(num++));

    static int num2 = 1;
    ui->label_3->setText(QString::number(num2++));
}

但是,在主窗体函数中,我们该如何确定开始哪个计时器呢?
于是,打开帮助文档
在这里插入图片描述
最下面的timerid,从名字上判断,它是一个用于区分计时器的参数
所以,在头文件里添加两个id

//mainwindow.h
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    void timerEvent(QTimerEvent *e);
    int id1;//标识计时器1
    int id2;//标识计时器2

把id应用到窗体和事件里面去

//mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    id1 = startTimer(1000);//参数1000指每隔1000毫秒调用一次事件函数
    id2 = startTimer(2000);
}
void MainWindow::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == id1)
    {
        static int num = 1;
        ui->label_2->setText(QString::number(num++));
    }
    if(e->timerId() == id2)
    {
        static int num2 = 1;
        ui->label_3->setText(QString::number(num2++));
    }
}

这样就可以了!
在这里插入图片描述
一个记一秒,一个记两秒!

使用计时器类

这个非常的好用!
在ui里添加一个label,然后就可以在主函数里操作

//mainwindow.cpp
#include <QTimer> //定时器的类
//定时器的第二种方法
QTimer *timer = new QTimer(this);
timer->start(500);
connect(timer,&QTimer::timeout,[=]()
{
    static int num4 = 1;
    ui->label_4->setText(QString::number(num4++));
});

这样,就写了一个0.5秒跳一次的计时器
同时,它还可以用来暂停
写添加一个暂停摁钮,然后写它的信号槽

//点击暂停暂停
connect(ui->pushButton,&QPushButton::clicked,[=](){
    timer->stop();
});

总之就是很好用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值