定时器

方式1:重写事件虚函数

void timerEvent(QTimerEvent*);
//注意需要在widget的构造函数中启动定时器,这是调用时机
int id=startTimer(1000);  //返回int型的定时器标志
  • 例1
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //开启定时器
    startTimer(1000);//参数1:时间间隔,单位,毫秒
}

Widget::~Widget()
{
    delete ui;
}

void Widget::timerEvent(QTimerEvent *)
{
    static int num=1;  //静态成员变量,延长生命期
    ui->label->setText(QString::number(num++));
}

  • 例2
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //开启定时器
    id1=startTimer(1000);//参数1:时间间隔,单位,毫秒
    id2=startTimer(2000);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::timerEvent(QTimerEvent *ev)
{
    if(ev->timerId()==id1)
    {
        static int num=1;  //静态成员变量,延长生命期
        ui->label->setText(QString::number(num++));
    }
    if(ev->timerId()==id2)
    {
        static int num=1;
        ui->label2->setText(QString::number(num++));
    }

}

方式2:实例化类对象

必须包含的头文件:

#include<QTimer>

涉及到的方法:
1.QTimer类的构造函数,创建一个定时器类

QTimer*timer=new QTimer(this);

2.调用QTimer的方法,启动定时器

timer->start(500);

3.连接QTimer的信号和某控件的槽函数

connect(timer,&QTimer::timeout,[=](){
          static int num=1;
          ui->label->setText(QString::number(num++));
});
  • 例子
#include "widget.h"
#include "ui_widget.h"
#include<QPushButton>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    QTimer*timer=new QTimer(this);
    timer->start(1000);
    connect(timer,&QTimer::timeout,this,[=]()
            {
        static int num=1;
        ui->label->setText(QString::number(num++));
    });
    connect(ui->btn,&QPushButton::clicked,[=](){

        timer->stop();
    });
    connect(ui->btn2,&QPushButton::clicked,[=](){


        timer->start();



    });
}

Widget::~Widget()
{
    delete ui;
}

posted @ 2025-05-01 20:20  噫~该死的碳酸饮料  阅读(17)  评论(0)    收藏  举报