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

QT教程:start()和startTimer()的区别

start() - QTimer 类的成员函数

        start() 是 QTimer 类的成员函数,用于启动一个基于 QTimer 对象的定时器。QTimer 是 Qt 中常用的定时器类,它会在设定的时间间隔后发出 timeout() 信号。

用法

QTimer timer;
timer.start(1000);  // 每隔 1000 毫秒触发一次 timeout() 信号
  1.     1. 参数:start(int msec),其中 msec 是时间间隔(以毫秒为单位)。
  2.     2. 触发信号:当时间间隔结束时,QTimer 会发出 timeout() 信号,你可以将这个信号连接到一个槽函数来处理。

示例 

QTimer timer;
QObject::connect(&timer,SIGNAL(timeout(), this, SLOT(on_m_clock_timeout());
timer.start(1000);  // 每隔 1000 毫秒调用一次 onTimeout()
  •      1.  连接信号与槽:通过 connect(),你可以将 SIGNAL(timeout())信号连接到一个槽函数,这样每次定时器触发时,槽函数就会被调用。
  •      2.  自动处理:QTimer 自动管理信号与槽,因此非常适合需要定期执行某些任务的场景。

startTimer() - QObject 类的成员函数 

        startTimer() 是 QObject 类的成员函数,用于启动一个低级别的定时器。它返回一个定时器 ID,之后可以通过 killTimer() 来停止该定时器。

用法 

int timerId = startTimer(1000);  // 每隔 1000 毫秒触发一次定时器事件
  •    1.  参数:startTimer(int msec),其中 msec 是时间间隔(以毫秒为单位)。
  •    2.  返回值:startTimer() 返回一个定时器 ID,你可以用这个 ID 来管理和停止定时器。

特点

  •    1.不依赖信号与槽:startTimer() 不使用信号与槽,而是通过事件处理机制触发 timerEvent(),需要在派生类中重写 timerEvent() 函数来处理定时器事件。。
  •    2.低级别定时器:startTimer() 是更低级别的定时器实现,适用于对性能要求较高或不需要复杂信号与槽机制的场景。
  •    3.手动停止:你可以使用 killTimer(timerId) 来停止通过 startTimer() 启动的定时器。

区别

特性

start() (QTimer)

startTimer() (QObject)

QTimer

QObject

触发机制

通过 timeout() 信号

调用 timerEvent() 事件处理函数

使用场景

GUI 应用中,定期触发信号的场景

低级别定时器,适合对事件和性能有特殊需求的场景

停止定时器

stop()

killTimer(timerId)

依赖事件循环

是(基于信号与槽机制)

是(通过事件机制处理)

需要重写事件处理

是,需要重写 timerEvent()

是否返回定时器 ID

是,返回定时器 ID

适合应用

适合需要信号与槽的定时器事件(如更新UI、动画)

适合更细粒度控制和性能要求的场景(如后台处理、非GUI应用)

总结

  •        1. start() (QTimer):适用于典型的定时任务,利用信号与槽机制进行处理。它适合在 GUI 应用中使用,能够方便地每隔一段时间执行某个任务,并且可以轻松管理和停止定时器。
  •        2. startTimer() (QObject):适用于需要更低级别定时器控制的场景,必须手动处理定时器事件(timerEvent()),并手动停止定时器(killTimer())。适合需要更高性能或更细粒度控制的任务。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第五章 Pytorch完成线性回归
  • 小白入门LLM大模型最牛X教程------上交《动手学大模型应用开发》!
  • 语音测试(一)ffmpeg视频转音频
  • 2024年全国大学生数学建模竞赛(A题) 建模解析|“板凳龙” 闹元宵|小鹿学长带队指引全代码文章与思路
  • OpenHarmony轻松玩转GIF数据渲染
  • 语言的自动类型
  • QueryWrapper中的or和and
  • 磁盘加密工具 | VeraCrypt v1.26.15 绿色版
  • STM32基础篇:RTC × Unix时间戳 × BKP
  • [Deepin] 简单使用 RustDesk 实现远程访问Deepin
  • LeetCode 热题100-70 最小栈
  • [数据库][oracle]ORACLE EXP/IMP的使用详解
  • MySQL数据类型-介绍
  • 服务器安装pytorch-阿里云-centos7
  • springboot启动很慢,加载xml时卡住 或者 {dataSource-1} inited卡住 或者 primary数据库配置错误,很久启动不起来
  • 2017-08-04 前端日报
  • AHK 中 = 和 == 等比较运算符的用法
  • css系列之关于字体的事
  • docker容器内的网络抓包
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Logstash 参考指南(目录)
  • October CMS - 快速入门 9 Images And Galleries
  • php中curl和soap方式请求服务超时问题
  • Python打包系统简单入门
  • Redux系列x:源码分析
  • Webpack 4 学习01(基础配置)
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 安装python包到指定虚拟环境
  • 基于HAProxy的高性能缓存服务器nuster
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端知识点整理(待续)
  • 王永庆:技术创新改变教育未来
  • 赢得Docker挑战最佳实践
  • 在weex里面使用chart图表
  • 阿里云ACE认证之理解CDN技术
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • 我们雇佣了一只大猴子...
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​Spring Boot 分片上传文件
  • ​插件化DPI在商用WIFI中的价值
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (day6) 319. 灯泡开关
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)计算机毕业设计高校学生选课系统
  • (附源码)流浪动物保护平台的设计与实现 毕业设计 161154
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (七)理解angular中的module和injector,即依赖注入
  • (五)activiti-modeler 编辑器初步优化
  • (一)80c52学习之旅-起始篇