Qt定时器QTimer使用教程与代码演示

article/2025/9/13 15:57:28

Qt提供了定时器类QTimer, 在使用时需要包含头文件

#include <QTimer>

QTimer类方法介绍:

  • void start(int msec); 开启定时器,定时间隔的msec毫秒
  • void stop(); 结束定时

QTimer信号:

  • void timeout(QPrivateSignal); 在链接定时器时,需要绑定该信号

QTimer的基本使用

下面介绍如何使用Qt定时器实现一个秒表。
新建一个Qt MainWindow项目,界面如下:
在这里插入图片描述
时间的显示用的LCD控件 QLCDNumber

运行效果
在这里插入图片描述

MainWindow 头文件代码:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTimer>QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();private slots:void on_btnStart_clicked();void on_btnStop_clicked();void on_btnContinue_clicked();void on_timer();private:Ui::MainWindow *ui;QTimer *m_pTimer;int     m_counts = 0;   //时间计数
};
#endif // MAINWINDOW_H

在头文件定义了定时器对象指针m_pTimer,毫秒计数m_counts

MainWindow cpp代码

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//LCD控件,需要先设置显示的数字个数,再显示数字,不然显示不全ui->lcdNumber->setDigitCount(9);ui->lcdNumber->display("00:00:000");//new QTimer, 设置定时器类型m_pTimer = new QTimer(this);m_pTimer->setTimerType(Qt::PreciseTimer);//链接定时器信号timeout,当调用start时,触发槽函数on_timerconnect(m_pTimer, &QTimer::timeout, this, &MainWindow::on_timer);
}MainWindow::~MainWindow()
{delete ui;
}//开始计时
void MainWindow::on_btnStart_clicked()
{m_pTimer->start(1);   //开启定时器,频率为1msm_counts = 0;
}//暂停计时
void MainWindow::on_btnStop_clicked()
{m_pTimer->stop();
}//继续计时
void MainWindow::on_btnContinue_clicked()
{m_pTimer->start(1);
}void MainWindow::on_timer()
{m_counts++;char buf[64];if(m_counts < 1000)  //1秒以内{sprintf(buf, "00:00:%03d", m_counts);}else if(m_counts > 1000 && m_counts < 60 * 1000) //一分钟以内{int seconds = m_counts / 1000;int ms = m_counts - seconds * 1000;sprintf(buf, "00:%02d:%03d", seconds, ms);}else{int mins = m_counts / (60 * 1000);int seconds = (m_counts - mins * 60 * 1000) / 1000;int ms = m_counts - mins * 60 * 1000 - seconds * 1000;sprintf(buf, "%02d:%02d:%03d", mins, seconds, ms);}ui->lcdNumber->display(buf);
}

需要注意的是,QTimer可以设置类型,也就是调用setTimerType进行设置,QTimer声明的定时器类型如下:

enum TimerType {PreciseTimer,CoarseTimer,VeryCoarseTimer};

这三种什么意思呢,Qt助手的解释如下:

  • Qt::PreciseTimer 精确的计时器试图保持毫秒的精确度
  • Qt::CoarseTimer 粗计时器试图将精度保持在所需间隔的5%以内
  • Qt::VeryCoarseTimer 非常粗糙的计时器只能保持完全的秒精度

在new QTimer时,可以根据需求设置定时器精度。

在UNIX(包括Linux, macOS和iOS)上,Qt将保持毫秒精度的Qt::PreciseTimer。对于Qt::CoarseTimer,间隔将被调整至5%,以使计时器与其他预期在或大约在同一时间触发的计时器对齐。目标是让大多数计时器在同一时间唤醒,从而减少CPU唤醒和功耗。

在Windows上,Qt将使用Windows的多媒体定时器工具(如果可用)用于Qt::PreciseTimer和普通的Windows定时器用于Qt::CoarseTimer和Qt::VeryCoarseTimer。

在所有平台上,Qt::VeryCoarseTimer的间隔被舍入到最近的满秒(例如,23500ms的间隔将被舍入到24000ms, 20300ms将被舍入到20000ms)。

QTimer::singleShot使用说明

QTimer除了周期性的执行某种操作,还可以单次执行,QTimer的静态函数singleShot就是为了实现这种单次操作功能,singleShot在一个给定时间间隔 msec(毫秒) 之后调用一个槽,例如下面的代码:

void MainWindow::on_pushButton_clicked()
{QTimer::singleShot(3000,this,[=]{//想要执行的代码qDebug() << "hello world" ;});
}

在3000ms后,将打印hello world, 上面是用的lambdab函数,也可以用类成员函数来写,代码如下:
头文件,在头文件定义成员函数do_single,给QTimer::singleShot做槽函数

class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();//定义成员函数,给QTimer::singleShot做槽函数void do_single();private slots:void on_pushButton_clicked();private:Ui::MainWindow *ui;
};

cpp文件

void MainWindow::on_pushButton_clicked()
{
//    QTimer::singleShot(3000,this,[=]{
//        //想要执行的代码
//        qDebug() << "hello world" ;
//    });QTimer::singleShot(3000, this, &MainWindow::do_single);
}void MainWindow::do_single()
{qDebug() << "hello world" ;
}

注意singleShot它只会触发一次,发出一次信号,然后来执行槽函数。


http://chatgpt.dhexx.cn/article/Pw5CtbFR.shtml

相关文章

【Qt】QTimer的简单使用

定义定时器对象&#xff1a;QTimer *myTimer; 动态分部内存空间&#xff1a;myTimer new QTimer(this); 启动定时器&#xff1a;myTimer->start(100); 定时器超时事件&#xff1a;QTimer::timeout() 停止定时器&#xff1a;myTimer->stop(); 等等&#xff1b; 程序实现功…

QT之QTimer详解以及结合多线程中开启定时器的示例

一 QTimer详解 QTimer类提供了重复和单次触发信号的定时器。 a.void timeout ()定时器超时后&#xff0c;这个信号被发射。 b.void start()开启定时器,它的重载函数void start(int msec),启动或重新启动一个超时时间间隔为毫秒的定时器,如果定时器正在运行&#xff0c;它将被停…

Qt 之 QTimer

作者&#xff1a; 一去、二三里 个人微信号&#xff1a; iwaleon 微信公众号&#xff1a; 高效程序员 QTimer类提供了重复和单次触发信号的定时器。 QTimer类为定时器提供了一个高级别的编程接口。很容易使用&#xff1a;首先&#xff0c;创建一个QTimer&#xff0c;连接timeo…

DEV、SIT、UAT、PET、SIM、PRD、PROD缩写介绍

按开发、测试、上线的时间线排序&#xff1a; DEV Development 研发环境 SIT System Integrate Test 系统集成测试环境&#xff08;内测&#xff09; UAT User Acceptance Test 用户验收测试环境 PET Performance Evaluation Test 性能评估测试环境&#xff08;压测&#xff0…

什么是SIT, UAT测试

2019独角兽企业重金招聘Python工程师标准>>> SIT测试 SIT(System Integration Testing)系统集成测试&#xff0c;也叫做集成测试&#xff0c;是软件测试的一个术语&#xff0c;在其中单独的软件模块被合并和作为一个组测试。它在单元测试以后和在系统测试之前。集成…

UAT测试和SIT测试的区别

区别如下&#xff1a; 1、UAT:终端用户集成测试&#xff0c;主要是要求用户参与进测试流程&#xff0c;并得到用户对软件的认可&#xff0c;鼓励用户自己进行测试设计和进行破坏性测试&#xff0c;充分暴露系统的设计和功能问题&#xff0c;显然&#xff0c;用户的认可和破坏性…

UT-FT-ST测试

单元测试(UT)、功能测试(FT)&#xff1a; 目的&#xff1a;1、尽量避免写的代码测试人员频繁的来找你其他地方又出问题了&#xff1b;2、提供的接口不可用&#xff1b;3、一个bug修复了引入了其他的bug或者其他用例变红了&#xff1b; 理解&#xff1a;在实现函数功能的时候编…

unittest教程__测试报告(6)

用例执行完成后&#xff0c;执行结果默认是输出在屏幕上&#xff0c;其实我们可以把结果输出到一个文件中&#xff0c;形成测试报告。 unittest自带的测试报告是文本形式的&#xff0c;如下代码&#xff1a; import unittestif __name__ __main__:# 识别指定目录下所有以tes…

Pytest 分组测试

有时候需要针对不同的测试环境跑不同的测试用例&#xff0c;如&#xff1a;冒烟测试、sit、uat、prd&#xff0c;所以给自动化测试用例做标记分组是很有必要的&#xff0c;pytest.mark 可以轻松实现这个功能。首先需要注册自定义标记。 通过使用pytest.mark帮助程序&#xff0…

冒烟测试回归测试UATSIT

在软件研发中&#xff0c;冒烟测试其实是微软首先提出来的一个概念&#xff0c;和微软一直提倡的每日build&#xff08;构建版本&#xff09;有很密切的联系。具体说&#xff0c;冒烟测试就是在每日build&#xff08;构建版本&#xff09;建立后&#xff0c;对系统的基本功能进…

使用GIT提交代码流程

安装步骤&#xff1a;双击Git-2.27.0-64-bit.exe安装 双击TortoiseGit-2.10.0.2-64bit.msi安装 代码提交一般有五个步骤: 1.查看目前代码的修改状态 2.查看代码修改内容 3.暂存需要提交的文件 4.提交已暂存的文件 5.同步到服务器 登陆复制仓库的地址然后复制到下图的Directory…

Git提交代码的流程

企业级项目git远程仓库一般是由master/test/dev三个分支构成&#xff0c;开发人员是在dev上做开发&#xff0c;当需要发布测试环境或者生产环境时管理员会把开发人员提交的代码合并到test或者master上。 开发人员git操作步骤&#xff1a; 1.git clone 把远程dev上的代码克隆到本…

傻瓜式Git提交代码流程【写给初学者】

前言 Git是程序员工作中最最常用的分布式版本控制系统&#xff0c;为的就是解决那种多人协作、多次修改的问题&#xff0c;虽说Git可以应用于各行各业&#xff0c;但是实际上还是程序员用的最多了&#xff0c;应该说是程序员的必备技能之一了&#xff0c;如果你还不会Git&…

vs2019中git提交代码的步骤

目录 前言 一、在vs2019的git界面提交代码 二、使用git命令行提交代码 总结 前言 在vs2019中使用git提交代码的步骤和一些常见问题。 一、在vs2019的git界面提交代码 1.切换到需要提交代码的分支上&#xff0c;首先更新分支。 vs2019工具栏选择Git&#xff0c;点击更新。 2.…

IDEA使用git提交代码

1.将鼠标移动到需要提交的代码文件上&#xff1b;2.右键文件夹&#xff0c;找到Git选项&#xff1b;3.进入选项中的Repository&#xff1b;4.然后点击push就可以将暂存的代码提交到 Git 服务器上。

在Idea用Git提交代码

前提是安装了Git 1、右键选择如下&#xff1a; 2、选择提交前文件、描述提交信息、提交到本地仓库&#xff0c;操作如下&#xff1a; 3、确定是否提交 4、推送远程仓库&#xff0c;右键选择如下&#xff1a;

idea上git提交代码的正确步骤

IDEA中项目集成git提交代码详细步骤 一&#xff1a;pull代码 在提交代码之前&#xff0c;我们必须先对代码就行更新操作&#xff0c;这一步非常重要&#xff0c;如果不进行更新代码操作&#xff0c;当有其他小伙伴有更改的内容已经提交到代码仓库但是我们本地缺没有更新的话&…

idea中使用git提交代码步骤

目录 一、先更新代码二、更新代码后的2种情况三、代码添加到本地仓库四、代码提交到缓冲区五、代码提交到远程git仓库 lz部分截图参考此链接https://blog.csdn.net/u013452337/article/details/79956604 一、先更新代码 1、在提交项目之前必须先对项目进行更新&#xff08;一定…

Git命令提交代码步骤

1.初始化&#xff1a;创建一个git仓库&#xff0c;创建之后就会在当前目录生成一个.git的文件 git init2.添加文件&#xff1a;把文件添加到缓冲区 git add filename3.添加所有文件到缓冲区&#xff08;从目前掌握的水平看&#xff0c;和后面加“.”的区别在于&#xff0c;加…

idea git提交代码

0、新工程如何加入git管理 复制.gitignore文件进工程根目录 .gitignore文件内容为&#xff1a; HELP.md target/ !.mvn/wrapper/maven-wrapper.jar !**/src/main/**/target/ !**/src/test/**/target/### STS ### .apt_generated .classpath .factorypath .project .settings…