定时器事件
窗口每隔一段时间后,就会触发该事件,对应的子类是QTimerEvent
对应的事件类型是QEvent::Timer
需要重写的函数是:
void timerEvent(QTimerEvent* event) override;
定时器事件的触发需要我们先开启定时器
然后根据需要停止定时器
通常我们可以添加多个定时器
使用定时器可以实现一些动态的效果
QTimerEvent常用方法
event->timerId//用来判断是哪一个定时器触发了定时器事件
举例
class TimerEvent : public QWidget
{
Q_OBJECT
public:
explicit TimerEvent(QWidget *parent = nullptr):QWidget{parent}
{
//构造函数中开启定时器
//调用startTimer()方法,来自于祖宗类QObject
timer_1=startTimer(100);//返回值就是定时器的id,100ms触发一次定时器事件
timer_2=startTimer(200);//开启第二个定时器,200ms触发一次定时器事件
}
~TimerEvent()
{
//析构函数中停止定时器,随便找的一个地方停止
//调用killTimer()方法,来自于祖宗类QObject
killTimer(timer_1);//把对应的定时器id传进去,就可以停止掉对应的定时器
killTimer(timer_2);
}
protected:
void timerEvent(QTimerEvent* event) override
{
//使用timerId()方法来判断该事件是哪一个定时器触发的
if(event->timerId()==timer_1)
{
//do something
}
else if(event->timerId()==timer_1)
{
//do somethig
}
}
private:
//这个窗口中我们使用了2个定时器
//用1个int型的值来标识不同的定时器,相当于定时器的id
int timer_1;
int timer_2;
};
QTimer类
QT也提供了一个定时器类
这里顺便说一下定时器类QTimer的简单使用
start()方法开启定时器
stop()方法停止定时器
还有一些其他的方法以后详细说明
每隔一段时间会发送一个timeout()信号;
通常会用槽关联这个信号,在槽函数中做一些你想做的事情
举例
class TimerEvent : public QWidget
{
Q_OBJECT
public:
explicit TimerEvent(QWidget *parent = nullptr):QWidget{parent}
{
//创建定时器1,并启动,100ms发送一次timeout信号
timer_1=new QTimer(this);
timer_1->start(100)
//创建定时器2,并启动,200ms发送一次timeout信号
timer_2=new QTimer(this);
timer_2->start(200)
//给定时器绑定槽函数
connect(timer_1,&QTimer::timeout,this,[&](){//do something...});
connect(timer_2,&QTimer::timeout,this,[&](){//do something...});
}
~TimerEvent()
{
//析构函数中停止定时器,随便找的一个地方停止
timer_1->stop();
timer_2->stop();
}
private:
QTimer* timer_1;
QTImer* timer_2;
};