Qt定时器:QTimer和timerEvent

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";
    }
}

你可能感兴趣的:(QT)