有时候我们在设计的时候我们会用到定时器,让他每间隔一段时间就增加1.

如下:

我们在上个博客的基础上创建一个label_2实现定时器的功能。要实现他每间隔1s就会加1的操作。

我们在widget.cpp文件如下所示:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//启动定时器:参数1:时间间隔,单位是msstartTimer(1000);
}Widget::~Widget()
{delete ui;
}void Widget::timerEvent(QTimerEvent *)
{int num=1;//要把num的int类型转化为numberui->label_2->setText(QString::number(num++));
}

结果如下:

发现他一直是1就不变了。

发现每个一秒都走一下timerEvent()这个方法,所以每一次都重新定义一个int num=1.所以我们要提高它的作用域不让他变成局部变量可以加一个static

如下:



那如果我们需要定义两个定时器,一个是每间隔1s增加1次,一个是每隔两秒增加一次呢?

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//启动定时器:参数1:时间间隔,单位是msid1 = startTimer(1000);id2 = startTimer(2000);//定义定时器2:
}Widget::~Widget()
{delete ui;
}
void Widget::timerEvent(QTimerEvent *ev)
{if(ev->timerId()==id1){static int num=1;//要把num的int类型转化为numberui->label_2->setText(QString::number(num++));}else if(ev->timerId()==id2) {static int num2=1;ui->label_3->setText(QString::number(num2++));}
}

如果对于多个定时器我们就需要定义每个定时器的id。

对于每个定时器的id定义,我们在widget.h文件中定义了。



利用第二种方式QT自带的类定义定时器,实现每间隔0.5s增加一次。

提前需要导入import<QTimer>

#include "widget.h"
#include "ui_widget.h"
#include<QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//启动定时器:参数1:时间间隔,单位是msid1 = startTimer(1000);//定义定时器2:id2 = startTimer(2000);//定时器的第二种方式QTimer *timer = new QTimer(this);//启动定时器timer->start(500);connect(timer,&QTimer::timeout,[=](){static int num =1;//label_4每隔0.5s加1ui->label_4->setText(QString::number(num++));});
}Widget::~Widget()
{delete ui;
}void Widget::timerEvent(QTimerEvent *ev)
{if(ev->timerId()==id1){static int num=1;//要把num的int类型转化为numberui->label_2->setText(QString::number(num++));}else if(ev->timerId()==id2) {static int num2=1;ui->label_3->setText(QString::number(num2++));}}



如果我们想让定时器暂停以及再启动,我们可以点击一个button实现。

#include "widget.h"
#include "ui_widget.h"
#include<QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//启动定时器:参数1:时间间隔,单位是msid1 = startTimer(1000);//定义定时器2:id2 = startTimer(2000);//定时器的第二种方式QTimer *timer = new QTimer(this);//启动定时器timer->start(500);connect(timer,&QTimer::timeout,[=](){static int num =1;//label_4每隔0.5s加1ui->label_4->setText(QString::number(num++));});//点击暂停,实现停止定时器connect(ui->stop_btn,&QPushButton::clicked,[=](){timer->stop();});//点击实现启动定时器connect(ui->pushButton,&QPushButton::clicked,[=](){timer->start();});
}Widget::~Widget()
{delete ui;
}void Widget::timerEvent(QTimerEvent *ev)
{if(ev->timerId()==id1){static int num=1;//要把num的int类型转化为numberui->label_2->setText(QString::number(num++));}else if(ev->timerId()==id2) {static int num2=1;ui->label_3->setText(QString::number(num2++));}}

Qt开发基础(10)——定时器相关推荐

  1. STM32开发基础知识——定时器

    目录 常见的定时器资源 系统嘀嗒定时器 Sys Tick 看门狗定时器watchDog 基本定时器 TIM6.TIM7 通用定时器 TIM2.TIM3.TIM4.TIM5 通用定时器的基本工作原理 定 ...

  2. 游戏开发基础(10)

    第一节 3D类游戏设计3D光线投射游戏包括从高解析度图形到快速动画的许多技术.尽管3D场景在这些 不同的游戏中可能变化很大,玩游戏的方法和设计游戏的基本技术却是类似的.场景中较明显的组成部分包括生成的 ...

  3. Qt开发基础(7)——QImage与Mat之间的相互转换

    Mat转QImage Mat mat=imread("c:/dev/test.jpg"); cvtColor(mat, mat, CV_BGR2RGB); QImage image ...

  4. 物联网国赛LORA模块开发基础教程(通用库)—定时器

    LORA模块开发基础教程目录 物联网国赛LORA模块开发基础教程-开发环境配置 物联网国赛LORA模块开发基础教程-输出(LED) 物联网国赛LORA模块开发基础教程-输入(按键) 物联网国赛LORA ...

  5. 物联网国赛LORA模块开发基础教程(通用库)—传感器

    LORA模块开发基础教程目录 物联网国赛LORA模块开发基础教程-开发环境配置 物联网国赛LORA模块开发基础教程-输出(LED) 物联网国赛LORA模块开发基础教程-输入(按键) 物联网国赛LORA ...

  6. 物联网国赛LORA模块开发基础教程(通用库)—串口收发

    LORA模块开发基础教程目录 物联网国赛LORA模块开发基础教程-开发环境配置 物联网国赛LORA模块开发基础教程-输出(LED) 物联网国赛LORA模块开发基础教程-输入(按键) 物联网国赛LORA ...

  7. 物联网国赛LORA模块开发基础教程(通用库)—输出(LED)

    LORA模块开发基础教程目录 物联网国赛LORA模块开发基础教程-开发环境配置 物联网国赛LORA模块开发基础教程-输出(LED) 物联网国赛LORA模块开发基础教程-输入(按键) 物联网国赛LORA ...

  8. 物联网国赛LORA模块开发基础教程(通用库)—OLED屏幕

    LORA模块开发基础教程目录 物联网国赛LORA模块开发基础教程-开发环境配置 物联网国赛LORA模块开发基础教程-输出(LED) 物联网国赛LORA模块开发基础教程-输入(按键) 物联网国赛LORA ...

  9. 物联网国赛LORA模块开发基础教程(通用库)—输入(按键)

    LORA模块开发基础教程目录 物联网国赛LORA模块开发基础教程-开发环境配置 物联网国赛LORA模块开发基础教程-输出(LED) 物联网国赛LORA模块开发基础教程-输入(按键) 物联网国赛LORA ...

最新文章

  1. JAVA 内存泄露详解(原因、例子及解决)
  2. PyCharm运行出现 Ignoring XDG_SESSION_TYPE=wayland on Gnome. Use QT_QPA_PLATFORM=wayland to run
  3. python滚动条自动向下,python tqdm 如何使得滚动条不上下滚动(保持一行内滚动)
  4. 分布式训练PyTorch 源码解读
  5. Jrebel 激活方式
  6. 软件详细设计说明书_软件测试的基本理论 笔记
  7. SQL SERVER 2008的top增强
  8. Django2.1简介及安装
  9. RabbitMQ中Confirm确认与Return返回消息详解(八)
  10. java 3dm_3dm游戏运行库合集安装包-游戏运行库合集安装包下载v3.0DM整理-西西软件下载...
  11. NeurIPS自动驾驶比赛结束,新加坡松下研究院申省梅团队夺冠...
  12. 深入浅出CChart 每日一课——快乐高四第二十课 七月流火,总复习之CChart多种编程模式
  13. Java程序员怎么规划五年职业生涯
  14. python爬取微信公众号文章(包含文章内容和图片)
  15. win10语言包在c盘哪里,win10系统通过卸载语言包释放c盘空间的操作方法
  16. 使用imagick将PDF转换成图片时报Fatal error: Uncaught exception 'ImagickException' with message 'FailedToExecute
  17. 本地搭建xxl-job服务及连接验证
  18. for/in 循环遍历对象的属性
  19. 奇点临近:人类文明延续
  20. 如何靠代码发家致富?——10种可以赚钱的途径

热门文章

  1. 关闭Flash广告弹窗( FF新鲜事 )
  2. 智能家居未来已来,可没做到这点便是“鸡肋”!
  3. bzoj4569[Scoi2016]萌萌哒
  4. Abnova 体外转录 mRNA工作流程和加帽方法介绍
  5. 为什么越来越喜欢用绍兴大带宽服务器
  6. “李四呢”这个名字挺独特的
  7. 关于组合数(二项系数)的一个递推公式
  8. 层次分析法 计算机程序,层次分析法(AHP)程序的设计
  9. Cross-Domain Activity Recognition Via Substructural Optimal Transport
  10. 你一定没见过的bug,app 不响应但是没有ANR