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