首页 > 其他分享 >QT教程:start()和startTimer()的区别

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

时间:2024-09-05 20:53:35浏览次数:12  
标签:定时器 QT timeout start 信号 QTimer 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())。适合需要更高性能或更细粒度控制的任务。

标签:定时器,QT,timeout,start,信号,QTimer,startTimer
From: https://blog.csdn.net/qq_62850449/article/details/141940346

相关文章

  • Qt C++设计模式->策略模式
    **策略模式(StrategyPattern)**是一种行为型设计模式,它定义了一系列算法,将每一个算法封装起来,并使它们可以互相替换,策略模式让算法可以独立于使用它的客户端而变化。这意味着,客户端可以根据需要动态选择使用哪种算法,而不需要修改算法的实现。策略模式的主要组成部分策略接......
  • 聊一下Jetpack AppStartUp的使用和原理。
    AppStartup是AndroidJetpack中的一个库,用于在应用启动时初始化组件,能简化启动序列并显式设置初始化依赖顺序,从而提高应用的启动速度。以下是关于AppStartup的使用和原理的介绍:使用方法添加依赖:在项目的模块级build.gradle文件中添加对AppStartup的依赖。implementatio......
  • QT6编写外部库并调用
    步骤创建qt项目,项目类型选择库。注意,在创建项目的过程中:在Details页面的QTmodule处,需要选择使用Core、Gui还是Widgets。如果不需要界面就选择Core,如果需要Gui或Widget就选择对应的即可。创建完成项目后,编写项目内容。编写完毕后点击构建(注意不是Debug或Release是Build)。如......
  • VS+QT生成的exe文件所依赖的dll文件和路径
    <divid="content_views"class="htmledit_views"><h2id="articleContentId"><aname="t0"></a>vs2017+Qt5.13.2程序打包</h2>step1打开vs2017,选中项目:选择release模式选择发布模......
  • 14-STM32F103+ML307(中移4G Cat1)基本控制篇(自建物联网平台)-STM32+ML307以SSL单向认
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明安装的MQ......
  • 14-STM32F103+ML307(中移4G Cat1)基本控制篇(自建物联网平台)-STM32+ML307以SSL单向认
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ZLIOTB/ML307/my.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p>  说明安装的MQ......
  • Python基础知识-8(PyQt GUI开发,输出乱码处理)
    (目录)介绍一个VSCode轻量级RestAPI客户端插件:ThunderClient一、关于shebang明确指定解释器#!/usr/bin/python3在shell中寻找第一个python解释器#!/usr/bin/envpython3二、Python类的私有方法/属性Python不支持私有方法/属性,但可以将类成员方法/属性名定义为......
  • 【Qt】消息对话框 QMessageBox
    消息对话框QMessageBoxQMessageBox用于显示一个消息给用户,,并且让用户进行一个简单的选择。消息对话框是应⽤程序中最常⽤的界⾯元素。消息对话框主要⽤于为⽤⼾提⽰重要信息,强制⽤⼾进⾏选择操作。例子:创建一个消息对话框(1)在QtDesigner中设置一个按钮(2)右键点击......
  • 【Qt】对话框
     对话框的基本概念    在使用某些网站的时候,有时会不经意间弹出各种奇奇怪怪的窗口。这种窗口就被称之为对话框。对话框往往是用户与用户之间进行“短平快"的操作。对话框是GUI程序中不可或缺的组成部分。⼀些不适合在主窗⼝实现的功能组件可以设置在对话框中。......
  • qt之QTableview右击显示菜单选项
     由于上下文菜单添加的action后右击鼠标也会触发QAction的triggered信号,所以添加了事件过滤,并且安装给QMenu的实列化。(代码粘贴复制到vs即可运行)file.h--------------------------------------------------------------------------------------------------#include<QtWidge......