QTimer和timerEvent是Qt中实现定时器的两种方法,定时器可以每隔一定时间执行指定操作。
QTimer用法
一个类中要执行多个定时操作,则定义多个QTimer变量即可。
//.h
private:
//定时器指针
QTimer *timer;
private slots:
void onTimerTimeout();
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建定时器
timer = new QTimer();
//设置定时器间隔超时间隔为1s
timer->setInterval(1000);
//超时信号 触发 槽函数onTimerTimeout
connect(timer, SIGNAL(timeout()), this, SLOT(onTimerTimeout()));
timer->start();
}
MainWindow::~MainWindow()
{
//停止定时器(此处也可不写,销毁定时器时自动停止且不会有警告和错误)
timer->stop();
//销毁定时器
delete timer;
delete ui;
}
void MainWindow::onTimerTimeout()
{
qDebug() << "执行计时器";
}
若定时器只想执行一次,可以向下面这样写,这样可以不实例化QTimer变量
//.h
private slots:
void onTimerTimeout();
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//1s后执行1次onTimerTimeout
QTimer::singleShot(1000, this, SLOT(onTimerTimeout()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onTimerTimeout()
{
qDebug() << "执行计时器";
}
timerEvent用法
一个类中要执行多个定时操作,则定义多个int变量记录定时器id,在timerEvent中以id区分即可。
//.h中
//重写timerEvent函数
private:
void timerEvent(QTimerEvent *event);
//int变量,用于记录计时器id,并在timerEvent中以id区分
int timerId1;
int timerId2;
//.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//开启计时器
timerId1 = startTimer(1000);
timerId2 = startTimer(1000);
}
MainWindow::~MainWindow()
{
//杀死计时器
killTimer(timerId2);
killTimer(timerId1);
delete ui;
}
void MainWindow::timerEvent(QTimerEvent *event)
{
if (event->timerId() == timerId1)
{
qDebug() << "执行计时器1";
}
else if (event->timerId() == timerId2)
{
qDebug() << "执行计时器2";
}
}