定时器事件
使用
使用定时器事件需要两步:
①重写定时器事件函数
②设置定时时间,开始定时
例这里在Widget父窗口中重写定时器事件,并定时更新label内容。
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
//重写定时器事件
void timerEvent(QTimerEvent* );
int m_nTimerID1;
int m_nTimerID2;
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QEvent>
#include <QTimerEvent>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//启动定时器
m_nTimerID1 = startTimer(1000);
m_nTimerID2 = startTimer(2000);
}
Widget::~Widget()
{
delete ui;
}
//重写定时器事件
void Widget::timerEvent(QTimerEvent* e)
{
if (e->timerId() == m_nTimerID1)
{
static int nNum = 1;
ui->label->setText(QString::number(nNum++));
}
if (e->timerId() == m_nTimerID2)
{
static int nNum2 = 1;
ui->label_2->setText(QString::number(nNum2++));
}
}
定时器类
除了重写定时器事件实现定时功能,也可使用定时器类来实现。
#include "widget.h"
#include "ui_widget.h"
#include <QEvent>
#include <QMouseEvent>
#include <QTimerEvent>
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//定时器类
QTimer* timer = new QTimer(this);
timer->start(500);
connect(timer, &QTimer::timeout, [=](){
static int nNum = 1;
ui->label_3->setText(QString::number(nNum++));
});
}