【QT】 QT定时器的使用

news2025/4/16 10:05:57

QT定时器的使用

  • 1. QTimer介绍
    • (1)QTimer的使用方法步骤
      • 示例代码1:定时器的启动和关闭
      • 现象:
      • 示例代码2:定时器每隔1s在标签上切换图片
      • 现象:
    • (2)实际开发的作用
  • 2.日期 QDate
    • (1)主要方法
  • 3.时间 QTime
    • (1)主要方法
      • 示例代码:
      • 现象:

1. QTimer介绍

QTimer是Qt中提供的一个定时器类,它可以定时触发一个信号,用于周期性执行一些操作。使用QTimer,可以轻松地实现定时器功能,如周期性地更新UI界面,周期性地执行一些任务等。

(1)QTimer的使用方法步骤

第一步:定义QTimer的对象
QTimer(QObject *parent = Q_NULLPTR)
参数:parent --this指针
第二步:设置超时时间(定时时间)
void setInterval(int msec)
参数:msec --》毫秒
第三步:启动定时器
void QTimer::start()
超时时间一旦到了,QTimer对象会自动触发timeout()信号,程序员只需要关联这个信号,在自定义的槽函数去实现自己的代码逻辑即可
第四步:关闭定时器
void QTimer::stop()

示例代码1:定时器的启动和关闭

// widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void onTimeout();
    void onStartTimer();
    void onStopTimer();

private:
    Ui::Widget *ui;
    QTimer *myTimer;
};
#endif // WIDGET_H

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 初始化定时器对象
    myTimer = new QTimer(this);
    // 设置定时时间(超时时间)
    myTimer->setInterval(1000);

    // 时间到了QTimer的对象会自动触发timeout信号
    connect(myTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));
    // 关联启动定时器按钮的槽函数
    connect(ui->btn_start, SIGNAL(clicked()), this, SLOT(onStartTimer()));
    // 关联关闭定时器按钮的槽函数
    connect(ui->btn_close, SIGNAL(clicked()), this, SLOT(onStopTimer()));
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onTimeout()
{
    qDebug()<<"hello world";
}

void Widget::onStartTimer()
{
    qDebug()<<"StartTimer";
    myTimer->start();
}

void Widget::onStopTimer()
{
    qDebug()<<"stopTimer";
    myTimer->stop();
}

现象:

在这里插入图片描述

示例代码2:定时器每隔1s在标签上切换图片

// widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private slots:
    void on_pushButton_clicked();
    void fun();
    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QStringList piclist;
    QTimer *mytimer;
    int n; //图片的下标
};
#endif // WIDGET_H

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //把所有要显示的图片存放到字符串列表中
    n=0;
    piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\1.png");
    piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\2.png");
    piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\3.png");
    piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\4.png");
    piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\5.png");

    //初始化定时器
    mytimer=new QTimer(this);
    mytimer->setInterval(1000); //1秒
    connect(mytimer,SIGNAL(timeout()),this,SLOT(fun()));
}

Widget::~Widget()
{
    delete ui;
}

//启动定时器
void Widget::on_pushButton_clicked()
{
    mytimer->start();
}

void Widget::fun()
{
    //每隔一秒钟在标签上切换显示图片
    QPixmap map(piclist.at(n));
    map.scaled(ui->label->width(),ui->label->height());
    ui->label->setScaledContents(true);
    ui->label->setPixmap(map);
    //由于只有5张(piclist.size())图片,n不可以无限制++
    if(n<piclist.size()-1)
        n++;
    else
        n=0;
}

void Widget::on_pushButton_2_clicked()
{
    mytimer->stop();
}

现象:

在这里插入图片描述

(2)实际开发的作用

定时器替代死循环/循环

2.日期 QDate

(1)主要方法

[static] QDate QDate::currentDate()
返回值:QDate的对象,表示当前系统的日期
int QDate::year() const
返回值:返回年
int QDate::month() const
返回值:返回月
int QDate::day() const
返回值:返回日
toString("yyyy-MM-dd")
把日期转换成字符串

3.时间 QTime

(1)主要方法

[static] QTime QTime::currentTime()
返回值:QTime对象,表示当前系统的时间
int QTime::hour() const
int QTime::minute() const
int QTime::second() const
toString("hh:mm:ss")
把时间转换成字符串

示例代码:

// widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:
    void onUpdateTime(void);

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTime>
#include <QTimer>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    // 1.实例化定时器对象
    QTimer *timer = new QTimer;
    // 2.定时器启动后会以指定的间隔时间发射timeout信号,关联对应的槽函数,执行对应的操作
    connect(timer, &QTimer::timeout, this, &Widget::onUpdateTime);
    // 3.启动定时器 1s定时
    timer->start(1000);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::onUpdateTime()
{
    // 显示到标签上
    ui->label_2->setText(QTime::currentTime().toString());
}

现象:

在这里插入图片描述

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

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

相关文章

【自动化测试】如何获取cookie,跳过登录的简单操作

前言 &#x1f31f;&#x1f31f;本期讲解关于自动化测试函数相关知识介绍~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话…

每天五分钟深度学习PyTorch:RNN CELL模型原理以及搭建

本文重点 RNN Cell(循环神经网络单元)是循环神经网络(RNN)的核心组成部分,用于处理序列数据中的每个时间步,并维护隐藏状态以捕获序列中的时间依赖关系。 RNN CELL的结构 RNN是一个循环结构,它可以看作是RNN CELL的循环,RNN CELL的结构如下图所示,RNN CELL不断进行…

【基于开源insightface的人脸检测,人脸识别初步测试】

简介 InsightFace是一个基于深度学习的开源人脸识别项目,由蚂蚁金服的深度学习团队开发。该项目提供了人脸检测、人脸特征提取、人脸识别等功能,支持多种操作系统和深度学习框架。本文将详细介绍如何在Ubuntu系统上安装和实战InsightFace项目。 目前github有非常多的人脸识…

进程(完)

今天我们就补充一个小的知识点,查看进程树命令,来结束我们对linux进程的学习,那么话不多说,来看. 查看进程树 pstree 基本语法&#xff1a; pstree [选项] 优点&#xff1a;可以更加直观的来查看进程信息 常用选项&#xff1a; -p&#xff1a;显示进程的pid -u&#xff…

【控制学】控制学分类

【控制学】控制学分类 文章目录 [TOC](文章目录) 前言一、工程控制论1. 经典控制理论2. 现代控制理论 二、生物控制论三、经济控制论总结 前言 控制学是物理、数学与工程的桥梁 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、工程控制论 1. 经典…

软考中级-软件设计师 2022年上半年下午题真题解析:通关秘籍+避坑指南

&#x1f4da; 目录&#xff08;快速跳转&#xff09; 大题&#xff08;下午题&#xff09;&#xff08;每题15分&#xff0c;共75分&#xff09;一、结构化分析与设计&#x1f354; 试题一&#xff1a;外卖订餐系统 二、数据库应用分析与设计&#x1f697; 试题二&#xff1a;…

波束形成(BF)从算法仿真到工程源码实现-第十节-非线性波束形成

一、概述 本节我们基于webrtc的非线性波束形成进行代码仿真&#xff0c;并对仿真结果进行展示和分析总结。更多资料和代码可以进入https://t.zsxq.com/qgmoN &#xff0c;同时欢迎大家提出宝贵的建议&#xff0c;以共同探讨学习。 二、仿真代码 2.1 常量参数 % *author : a…

《忘尘谷》音阶与调性解析

一、音高与音名的对应关系 根据搜索结果及音乐理论&#xff0c;结合《忘尘谷》的曲谱信息&#xff0c;其音阶与调性分析如下&#xff1a; 调性判定 原曲调性为 D调&#xff08;原曲标注为D调&#xff09;&#xff0c;但曲谱编配时采用 C调指法&#xff0c;通过变调夹夹2品&…

App测试小工具

前言 最近app测试比较多&#xff0c;每次都得手动输入日志tag&#xff0c;手动安装&#xff0c;测完又去卸载&#xff0c;太麻烦。就搞了小工具使用。 效果预览 每次测试完成&#xff0c;点击退出本次测试&#xff0c;就直接卸载了&#xff0c;usb插下一个手机又可以继续测了…

数智读书笔记系列029 《代数大脑:揭秘智能背后的逻辑》

《代数大脑:揭秘智能背后的逻辑》书籍简介 作者简介 加里F. 马库斯(Gary F. Marcus)是纽约大学心理学荣休教授、人工智能企业家,曾创立Geometric Intelligence(后被Uber收购)和Robust.AI公司。他在神经科学、语言学和人工智能领域发表了大量论文,并著有《重启AI》等多部…

Apache Kafka UI :一款功能丰富且美观的 Kafka 开源管理平台!!

Apache Kafka UI 是一个免费的开源 Web UI&#xff0c;用于监控和管理 Apache Kafka 集群&#xff0c;可方便地查看 Kafka Brokers、Topics、消息、Consumer 等情况&#xff0c;支持多集群管理、性能监控、访问控制等功能。 1 特征 多集群管理&#xff1a; 在一个地方监控和管理…

临床协调简历模板

模板信息 简历范文名称&#xff1a;临床协调简历模板&#xff0c;所属行业&#xff1a;其他 | 职位&#xff0c;模板编号&#xff1a;C1S3WO 专业的个人简历模板&#xff0c;逻辑清晰&#xff0c;排版简洁美观&#xff0c;让你的个人简历显得更专业&#xff0c;找到好工作。希…

【第45节】windows程序的其他反调试手段上篇

目录 引言 一、通过窗口类名和窗口名判断 二、检测调试器进程 三、父进程是否是Explorer 四、RDTSC/GetTickCount时间敏感程序段 五、StartupInfo结构的使用 六、使用BeingDebugged字段 七、 PEB.NtGlobalFlag,Heap.HeapFlags,Heap.ForceFlags 八、DebugPort:CheckRem…

Linux常见指令介绍上(入门级)

1. ls指令 功能&#xff1a;显示出当前目录下的所有子目录与文件。 PS:注意显示的是当前文件下的子目录与文件。 以下这些是可以和ls配套使用的一些选项 -a 列出目录下的所有文件&#xff0c;包括以 . 开头的隐含文件。 -d 将目录象文件一样显示&#xff0c;而不是显示其下…

【版本控制】git命令使用大全

大家好&#xff0c;我是jstart千语。今天来总结一下git的使用命令&#xff0c;上文会先将git命令都列出来&#xff0c;便于快速寻找&#xff0c;然后还会对部分常用命令图文讲解&#xff0c;适合新手&#xff0c;让你快速地理解。最后还会总结在idea中使用git。如果有缺失的&am…

手阳明大肠经之合谷穴

个人主页&#xff1a;云纳星辰怀自在 座右铭&#xff1a;“所谓坚持&#xff0c;就是觉得还有希望&#xff01;” 又名&#xff1a;1.《针灸甲乙经》&#xff1a;虎口。 所属经络&#xff1a;手阳明大肠经 定位 在手背&#xff0c;第1、2掌骨间&#xff0c;当第2掌骨桡侧的中点…

【VUE3】练习项目——大事件后台管理

目录 0 前言 1 准备工作 1.1 安装pnpm 1.2 创建vue项目 1.3 Eslint & Prettier的配置 1.4 husky 提交代码检查 1.5 目录调整 1.6 VueRouter4 1.6.1 基础配置 1.6.2 路由跳转 1.7 引入 Element Plus 组件库 1.8 Pinia 1.8.1 优化 1.9 封装请求工具 1.9.1 安…

万字长篇————C语言指针学习汇总

经过一段时间的学习&#xff0c;我们已经接触到了C语言的很多知识了。不过目前我们接下来我们要接触C语言中一个最大的“门槛”&#xff1a;指针。 什么是指针&#xff1f; 在介绍指针之前&#xff0c;我们首先要明白变量与地址之间的关系。 举一个生活中的案例&#xff1a;一…

实验一 HDFS的Shell操作

一、实验目的 熟悉HDFS Shell的语法格式&#xff0c;完成对HDFS上文件和目录的一系列操作 二、实验要求 2.1 练习dfs常用的子命令 ① -ls ② -du ③ -mv ④ -cp ⑤ -rm ⑥ -put ⑦ -cat ⑧ -help ⑨ -mkdir ⑩ -get 2.2通过Shell脚本定时采集数据到HDFS 三、实…

复变函数摘记3

复变函数摘记3 5. 留数5.1 可去奇点、极点、本性奇点5.2 零点与极点的关系5.3 在无穷远点处的情形5.4 留数 5. 留数 \quad 如果函数 f ( z ) f(z) f(z) 在 z 0 z_0 z0​ 及 z 0 z_0 z0​ 的邻域内处处可导&#xff0c;那么称 f ( z ) f(z) f(z) 在点 z 0 z_0 z0​ 处解析。…