QTimer作为Qt中方便快捷的定时器,在日常使用中经常用到,但是我有时会犯一些毛病,比如一位自己已经很了解一个类,就不会去特地观看这个类的官方文档,很多时候想用一些高级特性,会摸不着头脑,比如这次,我想要弄一个1秒钟之后只触发一次的定时器,我脑子里想的是:

QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, [=] {timer->stop();delete timer;//do something...
});
timer->start(1000);

我想了一下,这样写不是很鸡肋么?为什么非要手动撸一个只运行一次的定时器对象出来,越想就越是觉得有点蠢蠢的,于是去网上找,最后发现,原来Qt早就设计好了:

翻译:

QTimer类提供重复和单次定时器。

QTimer类为定时器提供高级编程接口。 创建一个QTimer实例,将其timeout()信号连接到相应的槽,然后调用start(),之后,它将以固定间隔发出timeout()信号。

举个例子,一个1秒(1000毫秒)触发的定时器(来自模拟时钟示例):

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);

计时开始之后,槽函数update()将会每秒触发一次。

你可以通过调用setSingleShot(true)将计时器设置为仅触发一次。 你还可以使用静态函数QTimer::singleShot()在指定的时间间隔后调用槽函数:

QTimer::singleShot(200, this, SLOT(updateCaption()));

有了这个函数,我们可以将一开始的那个仅触发一次的方法修改为以下代码:

QTimer::singleShot(1000, []{//do something...
});//或者
QTimer::singleShot(1000, this, []{//do something...
});//又或者
QTimer::singleShot(200, this, SLOT(doSomething()));//再或者
QTimer::singleShot(200, this, &MainWindow::doSomething);

这样有什么需要在1秒后仅触发一次的操作放在匿名函数里面,或者自己新建一个槽函数,连接超时的信号就可以了。

Qt QTimer使用相关推荐

  1. Qt: QTimer和QThread

    让QTimer 跑在其他线程. 一般写法如下. 1. 在main thread中为worker thread指定定时器. QThread* thread = new QThread(this);thr ...

  2. Qt QTimer在线程的应用与思考

    Qt中提供了QTimer计时器,可以单次或者多次触发,当计时结束的时候利用connect()函数可以触发自己想要的函数,具体实现如下: 创建定时器,并且和计时结束之后发射的槽函数信号连接起来: QTi ...

  3. 【QT】QT Qtimer定时的使用 含屏保功能实现,鼠标无操作后处理事件

    新建一个工程项目 我们的编程语言里面都有个定时器这样的类或者函数,定时器一般就是设定一个时间间隔,会自动发送一个信号,我们需要处理这个信号,也就是一个槽函数.因为QT是信号和槽的机制.定时操作有很多有 ...

  4. QT QTimer定时器显示系统时间倒计时功能

    QT定时器显示系统时间倒计时功能 lcdNumber控件显示 QTimer::singleShot(10000,this,&MainWindow6_6::close);//10秒后窗口自动关闭 ...

  5. Qt QTimer类

    Header: #include CMake: find_package(Qt6 COMPONENTS Core REQUIRED) target_link_libraries(mytarget PR ...

  6. linux+qt+定时精度,Qt QTimer测试定时精度

    调试信息输出窗口可以查看超时误差 dialog.h文件 #ifndef DIALOG_H #define DIALOG_H #include #include namespace Ui { class ...

  7. Qt QTimer定时器

    1.QTimer简介 QTimer 主要的属性是 interval,是定时中断的周期,单位毫秒.QTimer 主要的信号是 timeout(),在定时中断时发射此信号,要想在定时中断里做出响应,这就需 ...

  8. QT Desinger设计程序主界面 PyUIC生成.py

    我们在PyCharm安装配置Qt Designer+PyUIC教程中已配置好了PyCharm+QTDesigner+PyUIC环境 这里在此基上我们演示如何使用这些工具,编写一个图形界面程序: 程序主 ...

  9. OpenCV+ Qt Designer 开发人脸识别考勤系统

    文章目录 1. 系统介绍 2. 系统架构 3. 开发步骤 3.1 安装必要的库 3.2 设计用户界面 3.3 编写代码 3.3.1 导入库 3.3.2 连接数据库 3.3.3 定义主窗口类 3.3.4 ...

最新文章

  1. 静态程序分析chapter1 - 概述和两个重要步骤
  2. 通过Redis、Memcache的 incr 原子操作防刷机制的使用差别
  3. php面向对象公共类,PHP面向对象(一):类与类的实例化
  4. IDEA 中tomcat上面有个x 而且找不到配置tomcat的选项
  5. IPv6应用普及,任重而道远
  6. SWIFT推送之本地推送(UILocalNotification)之二带按钮的消息
  7. 如何构建一个流量无损的在线应用架构 | 专题中篇
  8. Oil Deposits
  9. (94)分频器设计(奇数分频)
  10. Windows平台手动卸载Oracle Server【完整+干净】
  11. JAVA 基于websocket实时通信的实现—GoEasy
  12. AndroidDeveloper Weekly No.3
  13. STM32驱动AD9833
  14. 可以退税吗_个人所得税APP详细操作步骤来了!你成功“退税”了吗?
  15. 服务器系统https打不开网页,解决网站启动HTTPS出现重定向过多网页打不开问题...
  16. Word也能制作座位表?掌握这个技巧安排座位不慌乱
  17. 项目无法识别 ?. 语法,导致报错Module parse failed: Unexpected token
  18. 在线答题小程序数据库设计
  19. shit 环信 IM SDK IM SDK web
  20. 早期的Twitte蠕虫

热门文章

  1. 基于android平台的出租打车软件app
  2. 学琴牢记这十条:你可以找到一个好的吉他导师
  3. 证券投资学(周建国)学习笔记
  4. SpringBoot 抵御XSS攻击
  5. 51单片机 PWM LED灯亮度调节+Proteus仿真
  6. 微信小程序支付:下单账号与支付账号不一致
  7. 微信小程序开发原生与框架对比
  8. Flowable教程
  9. 阿里巴巴22年Java后端面试
  10. python_advanced