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

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())。适合需要更高性能或更细粒度控制的任务。

http://www.kler.cn/a/291612.html

相关文章:

  • Android获取sim卡频段信息
  • Android 蓝牙Bluedroid线程池设计思路介绍
  • AIGC-------AI生成内容如何赋能AR和VR体验?
  • CMake的INSTALL FILES和INSTALL DIRECTORY有什么区别
  • [bug] StarRocks borker load意向之外的bug
  • 鸿蒙开发(18)arkTS类型
  • 运维学习————kafka(1)
  • 【LVI-SAM】激光点云如何辅助视觉特征深度提取
  • 前端黑科技:使用 JavaScript 实现网页扫码功能
  • ElasticSearch-关联关系
  • Ruoyi若依框架中工单管理(智能售货机运营管理系统)
  • 前端知识HTMLCSS
  • 软件测试 - 性能测试 (概念)(并发数、吞吐量、响应时间、TPS、QPS、基准测试、并发测试、负载测试、压力测试、稳定性测试)
  • 浙大数据结构:01-复杂度2 Maximum Subsequence Sum
  • Spring Boot:医疗排班系统开发的技术革新
  • java 给list对象根据给定条数进行分组工具类
  • Ai Illustrator 取消吸附到像素点,鼠标拖动的时候只能到像素点
  • 如何给Maven添加阿里云镜像
  • union 的正确食用方法
  • 任务栏透明怎么设置?适配最新版 Windows 电脑的方法介绍(图文教程)
  • 【文献阅读】AdaLora: Adaptive Budget Allocation for Parameter-Efficient Fine-Tuning
  • 鸿蒙ndk
  • List 集合指定值升序降序排列Comparator实现
  • JVM系列(八) -运行期的几种优化技术
  • TikTok养号一般养几天?账号起步方法
  • 0.3 学习Stm32经历过的磨难