QTimer的singleShot方法详解
本文最后更新于 16 天前,其中的信息可能已经有所发展或是发生改变。

1. QTimer单次执行概述

QTimer定时器默认是启动后一直循环执行,直至停止,当然,其也提供了对一般情况设置单次执行的方法setSingleShot(true);使用如下

QTimer *timer = new QTimer();
timer->setSingleShot(true);
timer->start(1000); // ms

而针对简单场景,如此设置较为繁琐,且需要额外维护一个变量,占用不必要资源。

那么Qt框架就提供了一个单次触发的静态方法QTimer::singleShot(),用于在指定的时间间隔后执行一次特定的操作。这是一个非常方便的工具,特别适合需要延迟执行某些操作的场景。


2. QTimer::singleShot()使用

QTimer::singleShot()有多种重载版本,常用的方法版本如下:

  • void QTimer::singleShot(int msec, const QObject *receiver, const char *member)

    • msec – 延迟的毫秒数
    • receiver – 接收信号的对象指针
    • member – 槽函数或信号名称

    示例:

    // 在MyClass类中使用如下代码:1000ms后执行MyClass::mySlot函数
    QTimer::singleShot(1000, this, &MyClass::mySlot);
  • void QTimer::singleShot(int msec, Qt::TimerType timerType, const QObject *receiver, const char *member)

    • msec – 延迟的毫秒数

    • timerType – 指定定时器类型,有如下三种,对定时误差有要求的场景需要使用此参数

    Qt::PreciseTimer (精确定时器):提供最高精度的定时器,通常能达到约1毫秒的精度,偏差通常在1-2毫秒内,但是最消耗资源;

    Qt::CoarseTimer (粗粒度定时器,默认类型):平衡精度和资源消耗,精度通常在1-15毫秒之间,取决于操作系统,最高约5%的偏差;

    Qt::VeryCoarseTimer (非常粗粒度定时器):最节省系统资源,但精度通常在1秒左右,最高可能会有±1秒的偏差。

    • receiver – 接收信号的对象指针

    • member – 槽函数或信号名称(字符串形式)

    示例:

    QTimer::singleShot(1000, Qt::PreciseTimer, this, &MyClass::mySlot);
  • void QTimer::singleShot(int mse, Functor &&functor)

    • msec – 延迟的毫秒数
    • functor – 可调用对象(如 Lambda 表达式

    示例:

    QTimer::singleShot(1000, [](){
      qDebug() << "1秒后执行";
    });

注意:

每个版本的第一个参数都是设置延时时间,默认单位是毫秒,可认为填入的是int类型值。

不过,实际上在新版的源码中,默认传入参数是std::chrono::milliseconds msec类型参数,在未包含chorno库时,默认传入的是Duration interval类型参数,实际上随后也会默认调用std::chrono::milliseconds msec重载类型的方法。

对于Duration interval参数,使用std::chrono类型变量传入,那就不仅提供毫秒,还提供秒、纳秒等多种时间单位

类型 说明
std::chrono::nanoseconds 纳秒 (1/1,000,000,000秒)
std::chrono::microseconds 微秒 (1/1,000,000秒)
std::chrono::milliseconds 毫秒 (1/1,000秒)
std::chrono::seconds
std::chrono::minutes 分钟
std::chrono::hours 小时
··· ···

示例:QTimer::singleShot(std::chrono::seconds(1), this, &MyClass::mySlot);

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇