当前位置: 首页 > article >正文

QT定时器

QT定时器

1.概述

这篇文章介绍如何使用定时器

2.定时器

2.1.创建项目

新建一个普通的widget类型项目,在widget.ui文件中添加一个label控件
在这里插入图片描述

2.1.QTimer

在帮助文档搜索timerEvent,查看QTimer Class 类提供的定时器。
在这里插入图片描述
该类提供了一个定时事件的函数,他是一个虚函数需要对他进行重写。
在这里插入图片描述
复制函数到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();
//    重写定时器事件
    void timerEvent(QTimerEvent *e);

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

在widget.cpp 文件中重写它的功能

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
//    启动定时器,每隔1秒发送一个事件
    startTimer(1000);

}

void Widget::timerEvent(QTimerEvent *e)
{
    static int num = 1;
    ui->label_2->setText(QString::number(num++));

}

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


启动后,每隔1秒调用一次
在这里插入图片描述
总结
这个定时器在使用时候,如果里面有个多个任务,需要用定时器ID区分每个任务,使用起来不是很方便,如下示例。

#include "widget.h"
#include "ui_widget.h"
#include <QTimerEvent>

int id1;
int id2;
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
//    启动定时器,每隔1秒发送一个事件
    id1 = startTimer(1000);
    
    id2 = startTimer(2000);

}

//定时事件中如果有多个任务,就需要使用定时器id区分,使用起来不是很方便
void Widget::timerEvent(QTimerEvent *ev)
{
    if(ev->timerId() == id1)
    {
    static int num = 1;
    ui->label_2->setText(QString::number(num++));
    }
    
    if(ev->timerId() == id2)
    {
    static int num2 = 1;
    ui->label_2->setText(QString::number(num2++));
    }
}

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


2.2.对象方式创建定时器

使用QTimer 类提供的定时器,可以创建定时器对象,每个对象控制一个定时任务,使用非常方便

#include "widget.h"
#include "ui_widget.h"
#include <QTimerEvent>
#include <QTimer>

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

//    第二种定时器方式,QTimer创建对象。
    QTimer * t1 = new QTimer(this);
    //启动定时器
    t1->start(1000);
    //开发定时器功能
    connect(t1, &QTimer::timeout, [=](){
        static int num3;
        ui->label_4->setText(QString::number(num3++));
    });


}

http://www.kler.cn/a/396759.html

相关文章:

  • SOHO场景开局(小型,多子网):AP+管理型交换机+路由器+光猫
  • 图像深度与像素深度的辨析
  • CentOS7.9 源码编译 FreeSWITCH 1.10.12
  • SpringBoot 应用出错 Comparison method violates its general contract!
  • java项目-jenkins任务的创建和执行
  • Springboot集成ElasticSearch实现minio文件内容全文检索
  • iOS swift开发--- 加载PDF文件并显示内容
  • 聊聊Flink:Flink的运行时架构
  • 【含开题报告+文档+PPT+源码】基于Spring Boot智能综合交通出行管理平台的设计与实现
  • 除了 TON, 哪些公链在争夺 Telegram 用户?数据表现如何?
  • 【IEEE出版 | 中国石油大学(华东)主办】第六届信息与计算机前沿术国际学术会议(ICFTIC 2024,12月13-15日)
  • 两部手机的IP地址:是否会相同?全面探讨
  • K8S 查看pod节点的磁盘和内存使用情况
  • 【364】基于springboot的高校科研信息管理系统
  • Python 如何通过 cron 或 schedule 实现爬虫的自动定时运行
  • Flink_DataStreamAPI_源算子Source
  • Java进阶 - 并发编程
  • 帽子矩阵--记录
  • SQL 中 BETWEEN AND 用于字符串的理解
  • Element UI如何实现按需导入--Vue3篇
  • Kotlin jetpack MVP
  • sql server 查看io资源使用
  • Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)
  • 【从零开始的LeetCode-算法】3270. 求出数字答案
  • 使用阿里云远程访问 Synology Web Station 的指南
  • JMeter初体验:从入门到入门的性能测试之旅