QT 定时器
定时器介绍
QObject 定时器
该定时器通过调用timerEvent函数使用,每次定时器触发事件,都会进入到该函数,不同的定时器具有不同的标识符,以此来区分。
QObject提供的定时器通过startTimer(int interval)启动,该函数启动了一个时间间隔为interval毫秒的定时器,启动成功只返回一个定时器标志符,失败返回0。下面直接上使用方法、
该例程启用了两个定时器,通过四个按钮依次对两个定时器进行开始和暂停。
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
//声明定时器
void timerEvent(QTimerEvent *event);
private slots:
//声明四个按钮槽函数
void on_Strat1_timer_clicked();
void on_Stop1_Timer_clicked();
void on_Start2_Timer_clicked();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
//定时器标识符变量
int TimerId2;
int TimerId1;
};
当启动定时器时,定时器的返回值就是该定时器的独特的标识符,相当于定时器ID号。
void Widget::on_Strat1_timer_clicked()
{
TimerId1 = startTimer(1000);//开始计时,返回当前定时器使用的特有标识,定时时间为1000ms,超市即触发定时事件
}
void Widget::on_Start2_Timer_clicked()
{
TimerId2 = startTimer(1500);//开始计时,返回当前定时器使用的特有标识
}
当使用多个定时器时,可以通过QTimerEvent::timerId()来获取已经启动的定时器标识符。
void Widget::timerEvent(QTimerEvent *event)
{
if(event->timerId() == TimerId1)
{
//触发第一个定时器
qDebug("QTimer 1~~~~~~");
}
if(event->timerId() == TimerId2)
{
//触发第二个定时器
qDebug("QTimer 2~~~~~~");
}
}
如何如何结束定时呢?
QObject定时器只能通过killTimer(int id)杀死,参数id为之前生成定时器标志符,根据标志符杀死定时器。杀杀之后,可以通过重新开启定时器来重复使用
void Widget::on_Stop1_Timer_clicked()
{
killTimer(TimerId1);// 杀死定时器
}
void Widget::on_pushButton_2_clicked()
{
killTimer(TimerId2);// 杀死定时器
}
QTimer类定时器
使用QTimer类定时器的步骤:
- 先创建一个QTimer定时器实例:QTimer *timer = new QTimer(this);
- 然后连接超时信号与槽:connect(timer, SIGNAL(timeout()), this, SLOT(Func()));
- 设置定时器触发间隔(设置触发间隔有两个方法,一个是调用setInterval(int msec)设置,另一个是调用start(int msec)时可将间隔时间作为参数),如:void setInterval(int msec) ;,
- 在需要的地方启动定时器:start(),或者设间隔时间,可通过start(1000),即启动一个1000毫秒的定时器
- 用完了暂停定时器:stop();
- 删除定时器实例:delete timer;
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
void func();
private slots:
void on_Start_btn_clicked();
void on_Stop_btn_clicked();
private:
Ui::Widget *ui;
QTimer* mTimer;
};
#include "widget.h"
#include "ui_widget.h"
#include "QTimer"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
mTimer = new QTimer(this);//创建定时器对象
mTimer->setInterval(1000);//设置定时器周期
connect(mTimer, &QTimer::timeout, this, &Widget::func);//连接定时器超时执行函数
}
void Widget::func()
{
qDebug("hello");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_Start_btn_clicked()
{
mTimer->start();//定时器开始
}
void Widget::on_Stop_btn_clicked()
{
mTimer->stop();//定时器暂停
}