QTimer是qt中的单次和重复定时器。
其主要有两种使用方式,一种是定时事件,一种是通过信号与槽。
一.定时事件timerEvent
使用:
1.在需要定时器的类中使用startTimer(x)进行定时设置和启动。
函数原型:
int id = startTimer(x);
其中,x是时间间隔,单位是毫秒ms,startTimer会自动启动该定时器。
返回值是该定时器独一无二的id。
2.同时需要使用定时事件timerEvent完成具体的定时任务。
void timerEvent(QTimerEvent* ev){
if(ev->timerId() == id){//判断是否是定时器id
//该定时器具体的定时事件
}
if(ev->timerId() == id2){//判断是否是定时器id2
//该定时器2具体的定时事件
}
...
}
代码示例:
Widget::Widget(QWidget *parent)//构造函数
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
id1 = startTimer(1000);//id1已经设置为成员变量
}
void Widget::timerEvent(QTimerEvent* event){//定时事件
if(event->timerId() == id1){
qDebug() << "hello qt";
}
}
运行结果:
二.QTimer对象
大多数情况下我们通过使用信号与槽connect的形式完成定时任务。
使用:
首先创建一个QTimer类对象,调用start函数完成定时和启动。
之后将QTimer对象的timeout信号与自定义的任务槽函数connect即可
同样以每隔1秒打印一次hello Qt为例。
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QTimer* t = new QTimer(this);//加入对象树
t->start(1000);
//以lambda表达式的形式设置槽函数
connect(t, &QTimer::timeout, [=]{
qDebug() << "hello";
});
}
运行结果: