Qt QTimerEvent 定时器事件

QTimerEvent类用来描述一个定时器事件。starttimer开启一个定时器,传入一个参数为超时时间,毫秒为单位。返回值是一个timerid,在timerEvent事件函数中,根据timerid来实现超时函数。

MainWindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3  
 4 #include <QMainWindow>
 5 #include <QTimerEvent>
 6 namespace Ui {
 7 class MainWindow;
 8 }
 9  
10 class MainWindow : public QMainWindow
11 {
12     Q_OBJECT
13  
14 public:
15     explicit MainWindow(QWidget *parent = 0);
16     ~MainWindow();
17 protected:
18     void timerEvent(QTimerEvent* event);
19  
20 private:
21     Ui::MainWindow *ui;
22     int id1;
23     int id2;
24     int id3;
25 };
26  
27 #endif // MAINWINDOW_H

mainwindow.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 #include <QDebug>
 4 MainWindow::MainWindow(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9     id1 = startTimer(1000);//开启一个1秒定时器,返回其ID
10     id2 = startTimer(1500);
11     id3 = startTimer(2200);
12 }
13  
14 MainWindow::~MainWindow()
15 {
16     delete ui;
17 }
18  
19 void MainWindow::timerEvent(QTimerEvent *event)
20 {
21     if(event->timerId() == id1)
22     {
23         qDebug()<<"timer1";
24     }
25     else if(event->timerId() == id2)
26     {
27         qDebug()<<"timer2";
28     }
29     else
30     {
31         qDebug()<<"timer3";
32     }
33 }

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt提供了两种类型的定时器:基于事件循环的 QTimer 和基于时间的 QBasicTimerQTimer 是一个基于事件循环的定时器,它在指定的时间间隔后发出 timeout() 信号。它可以是单次定时器,也可以是重复定时器。 下面是一个使用 QTimer 的例子: ```cpp #include <QApplication> #include <QLabel> #include <QTimer> int main(int argc, char *argv[]) { QApplication app(argc, argv); QLabel label("0"); label.show(); QTimer timer; timer.start(1000); // 1秒钟触发一次timeout()信号 int count = 0; QObject::connect(&timer, &QTimer::timeout, [&]() { label.setText(QString::number(++count)); }); return app.exec(); } ``` QBasicTimer 是一个基于时间的定时器,它通过重写 QObject::timerEvent() 函数来实现定时器功能。QBasicTimer 没有 start() 和 stop() 函数,而是通过 QCoreApplication::postEvent() 函数来启动和停止定时器。 下面是一个使用 QBasicTimer 的例子: ```cpp #include <QApplication> #include <QLabel> #include <QBasicTimer> class MyWidget : public QWidget { public: MyWidget(QWidget *parent = nullptr) : QWidget(parent) { label.setText("0"); label.show(); timer.start(1000, this); // 1秒钟触发一次定时器事件 } protected: void timerEvent(QTimerEvent *event) override { if (event->timerId() == timer.timerId()) { label.setText(QString::number(++count)); } } private: QLabel label; QBasicTimer timer; int count = 0; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); MyWidget widget; widget.show(); return app.exec(); } ``` 以上就是使用 QTimer 和 QBasicTimer 实现定时器的方法。需要注意的是,QTimer 是基于事件循环的定时器,因此在长时间的计算或阻塞操作中可能会出现延迟或不准确的情况;而 QBasicTimer 是基于时间的定时器,更加准确,但需要手动实现定时器事件的处理函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值