QTimerEvent(定时器事件)
计时器事件定期发送到已启动一个或多个计时器的对象。每个计时器都有一个唯一的标识符。计时器以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 类为计时器提供了一个高级编程接口。要使用它,请创建一个 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++));
});
效果:
QTime::singleShot的使用
该函数有多种重载,这里只列举一种
经过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));//显示数据
});