3种定时器触发方式
1.定时器事件触发【事件】
-定时器事件是虚函数,重写定时器事件
widget.h中声明定时器事件
//重写定时器事件
virtual void timerEvent(QTimerEvent * e);
widget.cpp重写定时器事件
- 定时器不唯一,定时器事件唯一
- 【startTimer】每隔1000/2000ms触发一次定时器事件
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
// this->startTimer(1000);//一旦构造完成就启动
this->id1=startTimer(1000);
this->id2=startTimer(2000);//在构造函数中开启2个定时器
}
//重写定时器事件(唯一的)
void Widget::timerEvent(QTimerEvent *e)
{
// static int time=0;
// ui->label->setText(QString::number(time++));
static int num1=0;
static int num2=0;
//必须判断哪个id触发的定时器事件
if(e->timerId()==this->id1)
{
ui->label->setText(QString::number(num1++));
}
else if(e->timerId()==this->id2)
{
ui->label_2->setText(QString::number(num2++));
}
}
2.通过定时器对象定时【信号与槽】
-创建一个定时器对象
-静态变量计时
static int num=0;
- 对象定时,button控制启停
//创建一个定时器对象
QTimer*time=new QTimer(this);
connect(time,&QTimer::timeout,[=](){
static int num=0;
ui->label_3->setText(QString::number(num++));
});
connect(ui->pushButton,&QPushButton::clicked,[=](){
time->start(1000);
});
connect(ui->pushButton_2,&QPushButton::clicked,[=](){
time->stop();
3. 通过【静态成员函数】singleShot 实现延时的功能
-静态成员函数
QTimer::singleShot(5000,[=]()
{
ui->label_4->setText("hhhhh");
});