添加链接 注册    登录
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
大力的西瓜  ·  JMeter定时器 - ...·  1 月前    · 
腹黑的消炎药  ·  Jmeter ...·  1 月前    · 
纯真的足球  ·  JMeter(九)_定时器 | Vicの博客·  1 月前    · 
乖乖的手术刀  ·  星叶半山玥府,南京星叶半山玥府房价,楼盘户型 ...·  2 月前    · 
爱喝酒的荔枝  ·  阿普尔足球俱乐部_百度百科·  8 月前    · 
从容的脆皮肠  ·  山东雄泰机械集团有限公司-企业信息查询黄页- ...·  10 月前    · 
粗眉毛的高山  ·  莱克伍德经理公告:4 年 2023 月 ...·  1 年前    · 
跑龙套的啄木鸟  ·  R语言读取数据跳过前几行 – 王进的个人网站·  1 年前    · 
link管理  ›  Qt定时器类QTimer | 爱编程的大丙
linux定时器 定时器
https://subingwen.cn/qt/qt-timer/
帅气的企鹅
6 月前
加载头像
C++在线帮助文档
英文版 英文版 中文版 中文版
服务
大丙课堂 大丙课堂 微信公众号 微信公众号 QQ交流群 QQ交流群 微信 微信
互动
留言板 留言板 码云 码云
爱编程的大丙
PAGE_NAME
专栏
  • Qt
  • Linux
  • C语言
  • C++
  • 数据结构
  • 设计模式
文章
  • 隧道
  • 分类
  • 标签
互动
  • 留言板
  • 友情链接
我的
  • 关于本站
  • 小空调
  • 相册集
搜索
  • 微信
    微信
  • 支付宝
    支付宝
互动
最新评论
正在加载中...
兴趣点
寻找你感兴趣的领域
C++ 5 C++11 36 CMake 2 Clion 1 C语言 42 IO多路复用 3 Json 4 Linux命令 5 Protobuf 1 QML 1 Qt 2 Qt事件 4 Qt基础 8 Qt控件 2 TCP 10 UDP 3 gcc/g++ 2 gdb 1 javascript 3 makefile 1 mysql 1 qml 3 redis 1 vim 2 二叉树 2 哈希 1 多线程 14 多进程 7 套接字通信 13 对称加密 1 并发 4 数据结构 16 文件IO 5 添加sudo权限 1 线程同步 6 线程异步 1 线程池 4 设计模式 25 非对称加密 1 项目 1

文章
归档
  • 九月 2024
    2 篇
  • 七月 2024
    3 篇
  • 六月 2024
    14 篇
  • 五月 2024
    2 篇
  • 十月 2023
    10 篇
  • 九月 2023
    1 篇
  • 八月 2023
    10 篇
  • 三月 2023
    2 篇

0
原创 Qt Qt基础

Qt定时器类QTimer

发表于 2021-01-16 更新于 2024-09-21
字数总计: 1k 阅读时长: 3分钟 阅读量: 河北
Qt Qt基础

Qt定时器类QTimer

苏丙榅 2021-01-16 2024-09-21

在进行窗口程序的处理过程中, 经常要周期性的执行某些操作, 或者制作一些动画效果,看似比较复杂的问题使用定时器就可以完美的解决这些问题, Qt中提供了两种定时器方式一种是使用Qt中的事件处理函数这个在后续章节会给大家做细致的讲解,本节主要给大家介绍一下Qt中的定时器类 QTimer 的使用方法。

要使用它,只需创建一个QTimer类对象,然后调用其 start() 函数开启定时器,此后QTimer对象就会周期性的发出 timeout() 信号。我们先来了解一下这个类的相关API。

1. public/slot function

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 构造函数
// 如果指定了父对象, 创建的堆内存可以自动析构
QTimer::QTimer(QObject *parent = nullptr);

// 设置定时器时间间隔为 msec 毫秒
// 默认值是0,一旦窗口系统事件队列中的所有事件都已经被处理完,一个时间间隔为0的QTimer就会触发
void QTimer::setInterval(int msec);
// 获取定时器的时间间隔, 返回值单位: 毫秒
int QTimer::interval() const;

// 根据指定的时间间隔启动或者重启定时器, 需要调用 setInterval() 设置时间间隔
[slot] void QTimer::start();
// 启动或重新启动定时器,超时间隔为msec毫秒。
[slot] void QTimer::start(int msec);
// 停止定时器。
[slot] void QTimer::stop();

// 设置定时器精度
/*
参数:
- Qt::PreciseTimer -> 精确的精度, 毫秒级
- Qt::CoarseTimer -> 粗糙的精度, 和1毫秒的误差在5%的范围内, 默认精度
- Qt::VeryCoarseTimer -> 非常粗糙的精度, 精度在1秒左右
*/
void QTimer::setTimerType(Qt::TimerType atype);
Qt::TimerType QTimer::timerType() const; // 获取当前定时器的精度

// 如果定时器正在运行,返回true; 否则返回false。
bool QTimer::isActive() const;

// 判断定时器是否只触发一次
bool QTimer::isSingleShot() const;
// 设置定时器是否只触发一次, 参数为true定时器只触发一次, 为false定时器重复触发, 默认为false
void QTimer::setSingleShot(bool singleShot);

2. signals

这个类的信号只有一个, 当定时器超时时,该信号就会被发射出来。给这个信号通过 conect() 关联一个槽函数, 就可以在槽函数中处理超时事件了。

1
[signal] void QTimer::timeout();

3. static public function

1
2
3
4
5
6
7
8
9
10
11
// 其他同名重载函数可以自己查阅帮助文档
/*
功能: 在msec毫秒后发射一次信号, 并且只发射一次
参数:
- msec: 在msec毫秒后发射信号
- receiver: 接收信号的对象地址
- method: 槽函数地址
*/
[static] void QTimer::singleShot(
int msec, const QObject *receiver,
PointerToMemberFunction method);

4. 定时器使用举例

  • 周期性定时器
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    // 创建定时器对象
    QTimer* timer = new QTimer(this);

    // 修改定时器对象的精度
    timer->setTimerType(Qt::PreciseTimer);

    // 按钮 loopBtn 的点击事件
    // 点击按钮启动或者关闭定时器, 定时器启动, 周期性得到当前时间
    connect(ui->loopBtn, &QPushButton::clicked, this, [=]()
    {
    // 启动定时器
    if(timer->isActive())
    {
    timer->stop(); // 关闭定时器
    ui->loopBtn->setText("开始");
    }
    else
    {
    ui->loopBtn->setText("关闭");
    timer->start(1000); // 1000ms == 1s
    }
    });

    connect(timer, &QTimer::timeout, this, [=]()
    {
    QTime tm = QTime::currentTime();
    // 格式化当前得到的系统时间
    QString tmstr = tm.toString("hh:mm:ss.zzz");
    // 设置要显示的时间
    ui->curTime->setText(tmstr);
    });

 
推荐文章
大力的西瓜  ·  JMeter定时器 - 霍格沃兹测试开发学社-教程网站
1 月前
腹黑的消炎药  ·  Jmeter 常用定时器:固定定时器、高斯定时器、同步定时器 · 测试之家
1 月前
纯真的足球  ·  JMeter(九)_定时器 | Vicの博客
1 月前
乖乖的手术刀  ·  星叶半山玥府,南京星叶半山玥府房价,楼盘户型,周边配套,交通地图,仙林街道毕生路以南,经天路以西 - 安居客
2 月前
爱喝酒的荔枝  ·  阿普尔足球俱乐部_百度百科
8 月前
从容的脆皮肠  ·  山东雄泰机械集团有限公司-企业信息查询黄页-阿里巴巴
10 月前
粗眉毛的高山  ·  莱克伍德经理公告:4 年 2023 月 XNUMX 日 - 莱克伍德市
1 年前
跑龙套的啄木鸟  ·  R语言读取数据跳过前几行 – 王进的个人网站
1 年前
Link管理   ·   51好读   ·   Sov5搜索   ·   小百科
link管理 - 链接快照平台