C++| QT定时器QTimer

QT定时器

QT实现定时器常用的方法有两种:QObject类提供的定时器和QTimer类。

使用定时器能够实现很多功能:定时更新UI、控制定时任务、进度条等。

QObject类提供的定时器

第一步:开启定时器。

timerId = this->startTimer(1000);// 返回定时器编号,设置计时器间隔为1000毫秒(1秒)

第二步:定时器响应事件,每次间隔1秒时间后会进入timerEvent函数。

void MyClass::timerEvent(QTimerEvent *event){
	if (event->timerId() != timerId)//判断是哪个定时器
        return;
}

第三步:定时器停止。

this->killTimer(timerId);

QTimer类

第一步:创建QTimer对象。

QTimer *timer = new QTimer(this);

第二步:将QTimer的timeout()信号连接到自定义槽函数上,计时器时间到达时执行相应的槽函数。

connect(timer, timeout(), this, onTimeout());

第三步:启动定时器。

timer->start(1000); // 设置计时器间隔为1000毫秒(1秒)

启动之后每秒中都会触发onTimeout()函数。
如果只想让被触发一次,那么在启动定时器前用setSingleShot(true),设置为单次触发。

QTimer *timer = new QTimer(this);
connect(timer, timeout(), this, onTimeout());
timer->setSingleShot(true);
timer->start(1000);

或者用singleShot实现单次触发。

// 写法1
QTimer::singleShot(1000,this,SLOT(onTimeout()));
// 写法2
QTimer::singleShot(1000,onTimeout);
// 写法3
QTimer *timer = new QTimer(this);
timer->singleShot(1000,onTimeout);

第四步:不需要定时器后,先停止定时器再销毁,以免内存泄漏。

timer->stop();
delete timer;

两者区别和联系

QTimer更加灵活些,依赖信号和槽,能够实现多次触发和单次触发,但是资源占用率高;QObject类提供的定时器不能单次触发,需要手动管理定时器(需要判断中断的定时器的ID)。

定时器的精度依赖于操作系统和硬件,大多数平台支持20ms的精确度,如果要实现很精确的时钟还是得用外部硬件触发时钟。

除了QTimer和QObject类,QBasicTimer也能实现定时器,但是通常不建议在上层应用中使用,一般用在QT内部,做应用的话更加推荐QTimer和QObject类。所以本篇就不对QBasicTimer类做介绍了。

相关推荐

  1. QTimer定时器

    2024-04-12 16:28:02       42 阅读
  2. Qt的定时器QTimer

    2024-04-12 16:28:02       41 阅读
  3. C++| QT定时器QTimer

    2024-04-12 16:28:02       35 阅读
  4. QTimer

    2024-04-12 16:28:02       32 阅读
  5. Qt | QTimer 类(计时器)

    2024-04-12 16:28:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 16:28:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 16:28:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 16:28:02       87 阅读
  4. Python语言-面向对象

    2024-04-12 16:28:02       96 阅读

热门阅读

  1. 探索JVM类加载机制

    2024-04-12 16:28:02       29 阅读
  2. SQL SERVER 备份

    2024-04-12 16:28:02       32 阅读
  3. stmmac_dvr_probe解析

    2024-04-12 16:28:02       39 阅读
  4. Go 之缓冲通道限制协程并发数目

    2024-04-12 16:28:02       34 阅读
  5. C语言什么是寄存器变量?如何实现?

    2024-04-12 16:28:02       39 阅读
  6. 36岁程序员,10年前错过了阿里,我一点都不后悔

    2024-04-12 16:28:02       38 阅读
  7. 【蓝桥杯日常】

    2024-04-12 16:28:02       36 阅读
  8. Composer安装与配置详解

    2024-04-12 16:28:02       35 阅读