【定时器 】 Qt使用定时器 QTimer

环境:Qt5
写作目的:因为要实现实时处理,也就不能用循环做,使用系统定时器能基本满足实时性要求。看过几篇博客,有的介绍不是特别清晰,感觉还是自己写一写,希望对大家有帮助,期待大家也可以推荐更多简洁有效的教程。
一. 首先介绍已经掌握的一种方法,使用TimerEvent,可以响应多个定时器。流程:
  1. 启动定时器,并记录定时器id、设定间隔时间(单位:毫秒);
  2. 自定义定时器事件处理函数(这一点类似嵌入式系统的中断);
  3. 根据定时器id,分别处理需要做的事。
  • 给出代码 :
    1.mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <iostream>
#include <QTimer>
#include <QObject>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

    // 定时器id
    int id1, id2;
    // 事件处理函数
    void timerEvent(QTimerEvent *ev);

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

2.mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    std::cout<<"start..."<<std::endl;

    // 启动定时器
    id1 = startTimer(1000); // 每个定时器返回一个唯一的id
    id2 = startTimer(2000);

}

MainWindow::~MainWindow()
{
    delete ui;
}

// 定时器处理函数
void MainWindow::timerEvent(QTimerEvent *ev){
    if(ev->timerId() == id1){  // 响应 id 1
        std::cout<< "heheda1"<<std::endl;
    }

    if(ev->timerId() == id2){  // 响应 id 2
        std::cout<<"heheda2"<<std::endl;
    }
}

  • 效果
    在这里插入图片描述
二.直接新建对象

.h文件中

    QTimer *timer; // 

cpp中:

        timer = new QTimer(this);    // 定时器
        timer->setInterval(60);	 	//设置间隔 毫秒
        connect(timer, SIGNAL(timeout()), this, SLOT(initit()));
        timer->start();

这里init()就是要回调的函数,需要自己定义,并且放在private slots 里面声明!

在此推荐使用第二种方法,用起来很爽主要是。 – 2020.3.22

参考:
https://www.bilibili.com/video/av54523708?p=32

感谢up

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值