Windows下Qt实现定时器功能
Qt中实现定时器功能有两种比较简单的方法:
1.通过Qt中QTimer类实现;
2.通过Qt中QObject类中的QTimeEvent事件重载实现。
QTimer类实现定时器功能
Qt中封装QTimer类封装了定时器信号和单触发定时器。它在内部使用定时器事件来提供更通用的定时器。QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽。当这段时间过去后,它将会发射timeout()信号。注意当QTimer的父对象被销毁时,它也会被自动销毁。
示例如下:
1.通过Qt先创建一个MainWindow界面,并在MainWindow.ui文件中加入start按钮和pause按钮,再加上一个显示label方便查看功能实现状态
2.在MainWindow类中添加QTimer类对象,并实现功能,代码示例如下:
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void slotTimeout();
private slots:
void on_pushButtonStart_clicked();
void on_pushButtonPause_clicked();
private:
Ui::MainWindow *ui;
QTimer *time;
};
MainWindow.cpp
#include "MainWindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
time(new QTimer(this))
{
ui->setupUi(this);
connect(time, &QTimer::timeout, this, &MainWindow::slotTimeout);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::slotTimeout()
{
if(ui->label->isHidden())
{
ui->label->show();
}
else
{
ui->label->hide();
}
}
void MainWindow::on_pushButtonStart_clicked()
{
time->start(200);
}
void MainWindow::on_pushButtonPause_clicked()
{
time->stop();
}
QTimeEvent事件重载实现定时器功能
同样QObject中包含的QtimeEvent事件重载也能实现定时器功能,这样就不需要再MainWindow类中添加其他类的对象了。
示例如下:
1.先在MainWindow.ui文件下添加一个开始计时的按钮
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
void timerEvent(QTimerEvent *te);
private slots:
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow.hpp
#include "MainWindow.h"
#include "ui_MainWindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::timerEvent(QTimerEvent *te)
{
qDebug() << te->timerId() << "定时器到点";
killTimer(te->timerId());
}
void MainWindow::on_pushButton_clicked()
{
int id = startTimer(2000);
qDebug() << "开启定时器, 定时器id: " << id;
}
以上就是Qt实现定时器功能的两种方法。