QT学习笔记(七):定时器事件的2种常用使用方式
Qt中定时器的使用有2种方法:一种是使用QObject类提供的定时器通过重载 timerEvent 事件处理过程函数,一种就是使用QTimer类。
其中QTimer 类来实现定时器使用的更多,它提供了更高层次的编程接口,比如可以使用信号和槽,还可以设置只运行一次的定时器。
1.使用QObject类提供的定时器
头文件添加:
private:int id1, id2, id3;
protected:void timerEvent(QTimerEvent *event); //声明定时器时间
源文件添加:
// 构造函数id1 = startTimer(1000); // 开启一个1秒定时器,返回其IDid2 = startTimer(1500);id3 = startTimer(2200);void Widget::timerEvent(QTimerEvent *event)
{QTime time = QTime::currentTime(); // 获取当前时间QString text = time.toString("hh:mm"); // 转换为字符串if((time.second() % 2) == 0)text[2]=' '; // 每隔一秒就将“:”显示为空格ui->lcdNumber->display(text);qDebug() << "timer1";}else if (event->timerId() == id2) {qDebug() << "timer2";}else {qDebug() << "timer3";}
}
通过从startTimer返回的ID传入void QObject::killTimer ( int id ) 函数中杀死定时器,结束定时器进入超时处理。
killTimer (id1);
2.使用QTimer定时器类
头文件添加:
private slots:void timerUpdate(); // 声明定时器溢出函数
源文件添加:
#include <QTimer>// 构造函数
QTimer *timer = new QTimer(this); // 创建一个新的定时器
connect(timer, &QTimer::timeout, this, &Widget::timerUpdate); // 关联定时器的溢出信号到槽上
timer->start(1000); // 设置溢出时间为1秒,并启动定时器void Widget::timerUpdate() // 定时器溢出处理
{QTime time = QTime::currentTime(); // 获取当前时间QString text = time.toString("hh:mm"); // 转换为字符串if((time.second() % 2) == 0)text[2]=' '; // 每隔一秒就将“:”显示为空格ui->lcdNumber->display(text);
}
结果:
只运行一次的定时器:
QTimer::singleShot(10000, this, &Widget::close);