Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽。
常使用信号和槽(代码看起来比较整洁)但是当使用多个定时器的时候最好用定时器事件来处理。
需要: #include <QTimerEvent>
方式:
开启一个定时器,返回值为int类型。他的参数interval是毫秒级别。当开启成功后会返回这个定时器的ID, 并且每隔interval 时间后会进入timerEvent 函数。直到定时器被杀死(killTimer)
实例:在两个label中自动计数,一个间隔为1秒,一个为2秒。
#include <QtWidgets/QWidget> #include "ui_Qtcontrol.h" class Qtcontrol : public QWidget { Q_OBJECT public: Qtcontrol(QWidget *parent = Q_NULLPTR); //重写定时器事件 void timerEvent(QTimerEvent* e); int ID1; int ID2; private: Ui::QtcontrolClass ui; };
#include "Qtcontrol.h" Qtcontrol::Qtcontrol(QWidget *parent) : QWidget(parent) { ui.setupUi(this); //启动定时器 ID1= startTimer(1000);//启动定时器事件,创建一个定时器并返回定时器ID //参数:单位毫秒---每隔n毫秒时间,就执行一次定时器事件 //返回值:定时器ID号 ID2 = startTimer(2000);//两秒启动一次 } void Qtcontrol::timerEvent(QTimerEvent* e) { if (e->timerId()==ID1) { static int num = 1; ui.label->setText(QString::number(num++)); } if (e->timerId()==ID2) { static int num = 1; ui.label_2 ->setText(QString::number(num++)); } }
由于所有的事件都重写在了timerEvent中,因此当需要多个定时器时,可以用定时器的ID去对应timerEvent中的事件。
需要 : #include <QTimer>
方式:
实例:启动label 每隔0.5秒计时
#include "Qtcontrol.h" #include"qtimer.h" Qtcontrol::Qtcontrol(QWidget *parent) : QWidget(parent) { ui.setupUi(this); QTimer* timer = new QTimer(this); //启动定时器 timer->start(500);//每隔0.5秒会发一个信号 connect(timer, &QTimer::timeout, [=]() { static int num = 1; ui.label->setText(QString::number(num++)); }); }
原文:https://www.cnblogs.com/xyf327/p/15096308.html