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

学了这个就能玩时限梗了
首先查个文档(注意,选类的时候选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();
});

总之就是很好用

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页