【Qt】Qt定时器类QTimer

news2024/11/16 12:01:00

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

       我们可以使用定时器对一些动画进行逐帧的播放,使得动画动起来;也可以使用定时器对时间进行不断的更新。

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

一、一些API接口

1.1 public/slot function

// 构造函数
// 如果指定了父对象,创建的堆内存可以自动析构
QTimer::QTimer(QObject* parent = nullptr);
// 将定时器启动起来
// 根据指定的时间间隔启动或者重启定时器
[slot] void QTimer::start();
// 启动或者重启定时器,超时间隔为msec毫秒
[slot] void QTimer::start(int msec);
// 停止定时器
[slot] void QTimer::stop();
// 设置定时器时间间隔为msec毫秒
// 默认值为0,一旦窗口系统事件队列中的所有事件都被处理完,一个时间间隔为0的QTimer就会触发
void QTimer::setInterval(int msec);
// 获取定时器的时间间隔,返回值单位为毫秒
int QTimer::interval() const;
// 设置定时器

/*
参数:
    Qt::PreciseTimer      精确的精度,毫秒级
    Qt::CoarseTimer       粗糙的精度,和1毫秒的误差在5%的范围内,默认精度
    Qt::VeryCoarseTimer   非常粗糙的精度,精度在1秒左右
*/

void QTimer::setTimerType(Qt::TimerType atype);
Qt::TimerType Qtimer::timeType() const; // 获取当前定时器的精度
// 如果定时器正在运行,返回true, 否则返回false
bool QTimer::isQctive() const;
// 判断定时器是否只触发一次
bool QTimer::isSingkeShot() const;
// 设置定时器是否只触发一次,参数为true,定时器值触发一次,为false,定时器重复触发
void QTimer::setSingleShot(bool singleshot);

1.2 signals

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

[signal] void QTimer::timeout();

1.3 static public function

/*
功能:在msec毫秒后发射一次信号,并且只发送一次
参数:
    msec:在msec毫米后发射信号
    receiver:接收信号的对象地址
    method:槽函数地址
*/

void QTimer::singleShot(
    int msec, const QObject* receiver, PointerToMenberFunction method);

二、定时器使用举例

2.1 周期性定时器

       我们的想法是:建立一个按钮,点击按钮后,会在按钮旁边的标签中显示当前时间;再次点击按钮,时间会暂停。

    // 创建一个定时器
    QTimer* timer = new QTimer(this);

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

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

    connect(timer, &QTimer::timeout, this, [=]()
    {
            QTime tm = QTime::currentTime();
            QString timstr = tm.toString("hh::mm::ss.zzz");
            ui->curTime->setText(timstr);

    });

2.2 一次性定时器

    connect(ui->onebtn, &QPushButton::clicked, this, [=](){
        QTimer::singleShot(2000, this, [=](){
            QTime tm = QTime::currentTime();
            QString tmstr = tm.toString("hh:mm:ss.zzz");
            ui->oneTime->setText(tmstr);
        });
    });

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1705792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用目标检测预训练模型大小及准确度比较

目标检测是计算机视觉领域中的一项重要任务,旨在检测和定位图像或者视频中的目标对象。当人类观看图像或视频时,我们可以在瞬间识别和定位感兴趣的对象。目标检测的目标是使用计算机复制这种智能。 近年来,目标检测网络的发展日益成熟&#…

设计模式基础——设计原则介绍

1.概述 ​ 对于面向对象软件系统的设计而言,如何同时提高一个软件系统的可维护性、可复用性、可拓展性是面向对象设计需要解决的核心问题之一。面向对象设计原则应运而生,这些原则你会在设计模式中找到它们的影子,也是设计模式的基础。往往判…

力扣刷题--1528. 重新排列字符串【简单】

题目描述 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置。 返回重新排列后的字符串。 示例 1: 输入:s “codeleet”, indices [4,5,6,7,0,2,1,3] 输…

OpenMV的VisionBoard视觉识别开发板学习记录

此篇博客仅用于对VisionBoard的开发板的学习研究记录,没有教学内容。 一、资料来源 开发板资料链接 开发板环境搭建手册 开发板视频教程 板子的资料网站 openmv官方的网站 目录 一、资料来源二、针对 VisionBoard的目标识别和定位总结1. 目标识别功能1.1 物体检测…

大模型时代:生活将如何被重塑?

大模型时代:生活将如何被重塑? 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 博客首页 怒放吧德德 To记录领地 🌝分享…

数据挖掘与机器学习——回归分析

目录 回归分析定义: 案例: 线性回归 预备知识: 定义: 一元线性回归: 如何找出最佳的一元线性回归模型: 案例: python实现: 多元线性回归 案例: 线性回归的优缺…

Codeforces Round 948 (Div. 2) D. XORificator(哈希)

题目 n*m(n*m<3e5)的矩阵&#xff0c; 实际为t(t<1e4)组样例&#xff0c;但保证sum n*m不超过3e5 你可以选一行把所有01翻转&#xff0c;问最多可以让多少列只有一个1&#xff0c;然后把你翻转的行输出 思路来源 其实题还挺裸的&#xff0c;教了一下潘老师&#xff0…

8D和FMEA的关系是什么?——FMEA软件

免费试用FMEA软件-免费版-SunFMEA 在质量管理领域中&#xff0c;8D和FMEA是两个非常重要的工具。它们各自有着独特的作用&#xff0c;但同时又存在着紧密的联系。本文旨在深入探讨8D和FMEA之间的关系&#xff0c;以及它们如何协同工作以提高产品质量和客户满意度。 8D&#x…

【JavaEE精炼宝库】多线程(3)线程安全 | synchronized

目录 一、线程安全 1.1 经典线程不安全案例&#xff1a; 1.2 线程安全的概念&#xff1a; 1.3 线程不安全的原因&#xff1a; 1.3.1 案例刨析: 1.3.2 线程不安全的名词解释&#xff1a; 1.3.3 Java 内存模型 (JMM)&#xff1a; 1.3.4 解决线程不安全问题&#xff1a; 二…

紫光展锐前沿探索 | 满足未来6G多差异化应用场景的技术体系思考

在6G架构/系统设计中&#xff0c;紫光展锐提出了未来6G空口“一体多翼”的技术体系概念&#xff0c;即“Big-Lite Multi-RAT”。本文将详细对该技术体系展开介绍。 “一体多翼”技术体系通过 “体”&#xff08;Big RAT&#xff09;和“翼”&#xff08;Lite RAT&#xff09;的…

数据结构:树(2)【堆排序】【堆排序的时间复杂度】【topk】

一.堆排序 关于排序我们还是挺熟悉的&#xff0c;像是冒泡排序&#xff0c;快速排序等等。这里多介绍一种也挺牛的排序&#xff0c;叫做堆排序。在我的上一篇博客里我们了解到了关于堆的概念&#xff0c;堆又分为大堆和小堆。那么如果我们在进行堆排序的过程中&#xff0c;我们…

cs与msf权限传递,mimikatz抓取明文密码

目录 一、cs与msf权限传递 二、mimikatz抓取明文密码 一、cs与msf权限传递 cs传到msf&#xff1a; 创建foreign监听器-->msf监听模块设置端口-->cs执行新建会话选择创建的监听器 1.创建监听器&#xff1a; 2.msf监听设置端口&#xff1a; use exploit/multi/hander s…

计算机网络学习

文章目录 第一章信息时代的计算机网络因特网概述电路交换&#xff0c;分组交换&#xff0c;报文交换计算机网络的定义和分类计算机网络的性能指标常见的三种计算机网络体系计算机网络体系结构分层的必要性计算机网络体系结构分层思想举例计算机网络体系结构中的专用术语 第二章…

类别型特征

#机器学习 #深度学习 #基础知识 #特征工程 #数据编码 背景 在现实生活中,我们面对的数据类型有很多,其中有的数据天然为数值类型具备数值意义,那么可以很自然地和算法结合,但是大部分数据他没有天然的数值意义,那么将他们送入到算法前,就需要对数据进行编码处理,将其转换为数…

php -v在cmd中正常显示 在vscode中却报错

效果展示 原因 在vscode中 终端是 PowerShell PowerShell 默认情况下它不会继承系统的PATH环境变量 解决方案 使用CMD作为终端 打开VSCode设置&#xff08;File > Preferences > Settings 或 Ctrl,&#xff09;。搜索 terminal.integrated.shell.windows。更改其值…

vue3主题切换按钮与功能实现

代码: <template><div class"slideThree"><label class"theme-switch"><inputtype"checkbox"class"checkbox"v-model"isChecked"change"setTheme"id"slideThree"name"check…

光伏组件积灰检测系统

光伏组件积灰检测系统是一种专门用于监测光伏组件表面灰尘积累情况的设备。以下是关于该系统的详细信息和特点&#xff1a; 系统概述 光伏组件积灰检测系统安装在光伏板的框架上&#xff0c;通过实时监测光伏组件表面的灰尘厚度、分布情况和清洁度&#xff0c;为运维人员提供…

揭秘爬虫技术:从请求到存储的全方位解析

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、爬虫初探&#xff1a;请求与响应 二、数据解析&#xff1a;从混乱中提炼价值 三、数据…

CentOS 7如何使用systemctl管理应用

说明&#xff1a;本文介绍如何使用systemctl命令的方式来启动、查看、停止和重启应用&#xff0c;以安装后的prometheus、alertmanager为例&#xff1b; Step1&#xff1a;创建文件 在系统/etc/systemd/system/路径下&#xff0c;创建一个xxx.service文件&#xff0c;该文件内…

配置环境变量

配置环境变量$(xxxx)&#xff0c;代表宏 32位操作系统&#xff0c;请自觉将文中路径中所有的x64换成x86。 %符号表示引用系统环境变量或用户自定义的环境变量 如果你想将某个文件夹添加到Visual Studio的路径中&#xff0c;你可以在环境变量中添加%FolderName%&#xff0c;其…