当前位置: 首页 > news >正文

Qt 定时器与定时事件

一、定时器

在头文件.h中进行声明:

private slots:void timeOut(); // 定时器超时槽函数

在.cpp中进行实现相应的功能:

// 构造函数
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);// 创建一个新的定时器QTimer *timer = new QTimer(this);// 设置定时器1秒钟超时timer->setInterval(100);        // 关联定时器的超时信号到槽上connect(timer, SIGNAL(timeout()), this, SLOT(timeOut()));// 开始计时timer->start();      
}// 定时器超时槽函数
void Widget::timeOut()
{QTime time = QTime::currentTime();      // 获取当前时间QString text = time.toString("hh:mm:ss");  // 转换为字符串if((time.second() % 2) == 0){// 每隔一秒就将“:”显示为空格text[2]=' ';text[5]=' ';}qDebug() << text;
}

这里在构造函数中开启了一个 1 秒的定时器,当它溢出时就会发射 timeout() 信号,这时就会执行我们的定时器溢出处理函数。在槽里我们获取了当前的时间,并且将它转换为可以显示的字符串。
“应用程序输出”窗口输出如下:

"15:36:23"
"15 36 24"
"15:36:25"
"15 36 26"

如果我们想让这个计时器只计时一次,那么必须使用void setSingleShot(bool singleShot)函数

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(timeOut()));
timer->setsetSingleShot(true)
timer->start(60000);

这样计时器只会倒计时 1 分钟,然后结束。

二、定时事件

QTimerEvent 类用来描述一个定时器事件。对于一个 QObject 的子类,只需要使用 int QObject::startTimer ( int interval) 函数来开启一个定时器,这个函数需要输人一个以毫秒为单位的整数作为参数来表明设定的时间,它返回一个整型编号来代表这个定时器。当定时器溢出时就可以在 timerEvent() 函数中获取该定时器的编号来进行相关操作。
使用 QTimerEvent 的 timerId() 函数来获取定时器的编号,然后判断是哪一个定时器并分别进行不同的操作。
在头文件.h中进行声明:

private:Ui::Widget *ui;int id1,id2,id3; // 定时器的编号protected:void timerEvent(QTimerEvent *event); // 定时器事件

在.cpp中进行实现相应的功能:

// 构造函数
Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);id1 = startTimer(1000); // 开启一个1秒定时器,并返回其idid2 = startTimer(2000);id3 = startTimer(4000);
}// 定时器事件
void Widget::timerEvent(QTimerEvent *event)
{// 1秒钟时间到,则定时器1溢出if (event->timerId() == id1){qDebug()<<"timer1";}else if(event->timerId() == id2){qDebug()<<"timer2";}else if (event->timerId() == id3){qDebug()<<"timer3";}
}

应用程序输出”窗口输出如下:

timer1
timer1
timer2
timer1
timer1
timer2
timer3
http://www.lryc.cn/news/93627.html

相关文章:

  • 《UNUX环境高级编程》(1)UNIX基础
  • MATLAB 入门之旅摘要
  • chatgpt赋能python:Python小数运算:解决精度问题的最佳实践
  • Linux 安装Docker完整教程(六)
  • 手机连接adb 相关问题汇总
  • MySQL数据相关操作
  • 2023年5月青少年软件编程(Python) 等级考试试卷(四级)
  • Python selenium自动化测试模型图解
  • 【详解】篮球记分牌硬件及代码
  • FreeRTOS实时操作系统(二)系统文件代码学习
  • 分布式驱动电动汽车定速巡航控制
  • 如何启动和关闭分布式集群
  • WLAN基本概述及简单组网配置
  • 响应式Web设计单元测试
  • linux计划任务管理
  • 研一,有点迷茫。
  • 【新版】系统架构设计师 - 软件工程
  • html实现好看的个人介绍,个人主页模板3(附源码)
  • 某大厂工作3年,被劣驱良了。。。
  • 爱奇艺大数据加速:从Hive到Spark SQL
  • c++构造函数的多个细节拷问
  • Redis入门 - Lua脚本
  • Creating Serial Numbers (C#)
  • pycharm使用之torch_geometric安装
  • spring-mvc 工作流程
  • 物联网Lora模块从入门到精通(六)OLED显示屏
  • 平面坐标变换(单应性变换/Homography变换)
  • 大数据项目常识
  • Linux系统:常用服务端口
  • 前端和后端分别是什么?