1、Qt定时器事件
Qt定时器事件是一种在Qt应用程序中使用的定时器机制,可以在指定的时间间隔内执行特定的任务。使用Qt定时器事件可以实现定时操作和控制,例如每隔一段时间就刷新一次界面、每隔一段时间就执行一次特定的计算等。
2、QTimerEvent类用来描述一个定时器事件。
对于一个QObject的子类,只需要使用startTimer ( )函数就可以开启一个定时器,这个函数需要输入一个以毫秒为单位的整数作为参数来表明设定的时间,函数返回一个整型编号来代表这个定时器。当定时器溢出时可以在timerEvent()函数中进行需要的操作。
编程中更多的是使用QTimer类来实现一个定时器,它提供了更高层次的编程接口,比如可以使用信号和槽,还可以设置只运行一次的定时器。
新建QtWidgets应用,更改项目名称,基类选择QWidget,然后类名保持Widget不变。
首先在widget.h文件中添加函数声明:
Protected:
Void timerEvent(QTimerEvent * event);
定义private私有变量
Int id1 , id2, id3;
在widget.cpp文件中添加头文件 #include<QDebug>,然后再构造函数中添加代码
id1 = startTimer(1000); //开启一个1秒定时器,返回其ID
id2 = startTimer(1500);
id3 = startTimer(2200);
因为startTimer()函数的参数是以毫秒为单位的,这里使用1000,所以是1s,程序中获取了各个定时器的编号。
下面添加定时器事件处理函数的定义:
void Widget::timerEvent(QTimerEvent*event)
{
if(event->timerId()== id1) //判断是哪个定时器
{
qDebug() << "timerl";
}
else if (event->timerId()== id2)
{
qDebug( ) << "timer2";
}
else{
qDebug() << "timer3";
}
}
这里使用QTimerEvent的timerId()函数来获取定时器的编号,然后判断是哪一个定时器并分别进行不同的操作。
3、QTimer类实现一个简单的电子表
首先widget.h文件中添加私有槽声明:
private slots:
void timerUpdate();
在widget.cpp文件中添加头文件:
# include < QTimer >
# include <QTime >
然后在构造函数中继续添加代码:
QTimer * timer = newQTimer(this); //创建一个新的定时器
//关联定时器的溢出信号到槽上
connect(timer,&QTimer::timeout,this,&Widget::timerUpdate);
timer ->start(1000); //设置溢出时间为1s,并启动定时器
下面添加定时器溢出信号槽函数的定义:
void Widget::timerUpdate() //定时器溢出处理
{
QTime time = QTime::currentTime(); //获取当前时间
QString text = time.toString("hh:mm"); //转换为字符串
if((time.second( ) % 2) ==0) text[2]=’ ’;//每隔一秒就将“:”显示为空格
ui->lcdNumber->display(text);
}
这里在构造函数中开启了一个1s的定时器,当它溢出时就会发射timeout()信号,这时就会执行定时器溢出处理函数。槽里获取了当前的时间,并且将它转换为可以显示的字符串;然后使用QTime类的second()函数获取秒的值,再将它与2进行取余操作,如果为0就让时与分之间的“:”变为空格,这样便实现了每隔一秒闪烁一下的效果。如果想停止一个定时器,可以调用它的stop()函数。
QTimer类中还有一个singleShot()函数来开启一个只运行一次的定时器,
下面使用这个函数让程序运行10s后自动关闭。
在widget.cpp文件中的构造函数里添加如下一行代码:
QTimer::singleShot(10000,this,&Widget::close);
这里将时间设置为10s,溢出时便调用窗口部件的close()函数来关闭窗口。即运行程序,等待10s,程序会自动退出。