计时器事件定期发送到已启动一个或多个计时器的对象。每个计时器都有一个唯一的标识符。计时器以Object::startTimer启动定时器。
| timerId() | 获取定时器编号 |
使用事件实现定时:
添加成员函数和变量
- void timerEvent(QTimerEvent *event);//定时器事件
- int time1;//定时器1
- int time2;//定时器2
- QLabel *ab1=nullptr;//显示数据1
- QLabel *ab2=nullptr;//显示数据2
- int date1=0;//数据1
- int date2=0;//数据2
构造函数:
- resize(800,800);
- ab1=new QLabel(this);
- ab2=new QLabel(this);
- ab1->setFrameShape(QFrame::Box);
- ab2->setFrameShape(QFrame::Box);
- ab1->resize(200,50);
- ab2->resize(200,50);
- ab2->move(300,0);
-
- time1=startTimer(1000);//定时器1=1000毫秒
- time2=startTimer(500);//定时器2=500毫秒
定时器事件的实现:
- void Widget::timerEvent(QTimerEvent *event)//定时器事件
- {
- if(event->timerId()==time1)//time1时的情况
- {
- ab1->setText(QString::number(date1++));
- }
- if(event->timerId()==time2)//time2时的情况
- {
- ab2->setText(QString::number(date2++));
- }
- }
效果:

QTimer 类为计时器提供了一个高级编程接口。要使用它,请创建一个 QTimer,将其timeout() 信号连接到相应的插槽,然后调用start()。从那时起,它将以恒定的间隔发出timeout() 信号。
构造函数 :
![]()
常用函数:
| start() | 开启 |
| start(mesc) | 开启,如果计时器已经在运行,它将停止并重新启动 |
| stop() | 暂停 |
| timeid() | 返回运行的定时器的编号 |
| setSingleShot() | 保存计时器是否为单次计时器 |
直接使用的函数:
QTime::singleShot(int msec,const Object*recriver,constchar* member);
头文件添加:
- QLabel *ab1=nullptr;//显示数据1
- QLabel *ab2=nullptr;//显示数据2
- int date1=0;//数据1
- int date2=0;//数据2
构造函数:
- resize(800,800);
- ab1=new QLabel(this);
- ab2=new QLabel(this);
- ab1->setFrameShape(QFrame::Box);
- ab2->setFrameShape(QFrame::Box);
- ab1->resize(200,50);
- ab2->resize(200,50);
- ab2->move(300,0);
- /*
- QTimer *timer1=new QTimer(this);//定时器1
- QTimer *timer2=new QTimer(this);//定时器2
- timer1->start(1000);
- timer2->start(500);
- connect(timer1,&QTimer::timeout,[=]()
- {
- ab1->setText(QString::number(date1++));
- });
- connect(timer2,&QTimer::timeout,[=]()
- {
- ab2->setText(QString::number(date2++));
- });
效果:

该函数有多种重载,这里只列举一种
经过5000毫秒,关闭页面
QTimer::singleShot(5000,this,&Widget::close);
- resize(800,800);
- QLabel *label=new QLabel(this);
- label->resize(200,50);
- QTimer *timer=new QTimer(this);
- connect(timer,&QTimer::timeout,[=]()
- {
- QDateTime datetime;
- datetime=QDateTime::currentDateTime();//获取当前时间
- QString s=datetime.toString("yyyy:MM:dd:hh:mm:ss");
- label->setText(s);
- });
- timer->start(1000);//开启定时器

- qsrand() 设置随机数的初值
- qrand() 产生随机数
- resize(800,800);
- QLabel *label=new QLabel(this);
- label->resize(200,50);
-
- QTimer *timer=new QTimer(this);
- qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));//设置随机种子
- connect(timer,&QTimer::timeout,[=]()
- {
- int rand=qrand()%300;
- label->setText(QString::number(rand));
- });
- timer->start(1000);//开启定时器
在ui->界面中添加以下控件
QLabel 边框为Box 三个QPushButton

在.h文件中添加成员变量
- int number=0;//记录数据
- QTimer *timer=nullprt;//计时器
构造函数中的代码:
- resize(800,800);//设置窗口大小
- timer=new QTimer(this);//创建一个定时器
- ui->label->setText(QString::number(number));
- connect(ui->pushButton,&QPushButton::clicked,[=]()//开始按钮
- {
- timer->start(1000);//启动计时器
- });
- connect(ui->pushButton_2,&QPushButton::clicked,[=]()//暂停按钮
- {
- timer->stop();//停止计时器
- });
- connect(ui->pushButton_3,&QPushButton::clicked,[=]()//归零按钮
- {
- number=0;//数据归零
- ui->label->setText(QString::number(number));
- });
- connect(timer,&QTimer::timeout,[=]()//mutable
- {
- ui->label->setText(QString::number(++number));//显示数据
- });
