首页 > 其他分享 >如何在QT使用定时器

如何在QT使用定时器

时间:2024-07-18 18:56:56浏览次数:12  
标签:Widget 定时器 clicked QT void timer 如何 picID ui

最近得我再学习如何使用QT来编写计时器,也学习到2种图片的显示方式:

Qobject定时器

1.通过Qobject来做定时器,首先,我们需要在Headers里需要添加来设置一个计时器,计时多长时间,它是以毫秒为单位的,这边我们以1000毫秒为例,

#define TIMEOUT 1*1000
在开启计时器的时候,开始计时器,我们使用的startTimer()
myTimerId =this->startTimer(TIMEOUT);

停止计时器,使用的killTimer()

this->killTimer(myTimerId);

以下是通过Qobject计时器来做切换图片,header的代码如下:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

#define TIMEOUT 1*1000

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget: public Widget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    virtual void timerEvent(QTimerEvent *event);
    ~Widget();

private:
    Ui::Widget *ui;
    int myTimerId;
    int picID;

private slots:
    void on_startButton_clicked();


    void on_stopButton_clicked();
};

#endif // WIDGET_H

主程序代码如下:

#include "Widget.h"
#include "ui_Widget.h"

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

    picID=2;
    QPixmap pix("地址\\*.jpg");
    ui->label->setPixmap(pix);
}

Widget::Widget()
{
    delete ui;
}


void Widget::on_startButton_clicked()
{//开启定时器,返回定时器编号
   myTimerId = this->startTimer(TIMEOUT);
}

void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId()!=myTimerId)
    return;

    QString path("地址");
    path += QString::number(picID);
    path+=".jpg";

    QPixmap pix(path);
    ui->label->setPixmap(pix);

    picID++;
    if(5==picID)
        picID=1;
}

void Widget::on_stopButton_clicked()
{
    this->killTimer(myTimerId);
}

这样就可以完成图片轮播的效果啦~

QTimer定时器

如果使用QTimer来实现的话,那操作会有些许不同,我们会使用到timer->start()

timer->start(TIMEOUT);

而结束也会有所不同,我们直接用到的是 timer->stop()

 timer->stop();

以下是通过QTimer计时器来做切换图片,header的代码如下:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>

#define TIMEOUT 1*1000

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    
private:
    Ui::Widget *ui;
    QTimer *timer;
    int picID;

private slots:
    void on_startButton_clicked();
    void timeoutSlot();
    

    void on_stopButton_clicked();
    void on_singleButton_clicked();
};
#endif // WIDGET_H

主程序代码如下:

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    
    timer =new QTimer;
    picID=2;
    
    QImage img;
    img.load("地址\\*.jpg");
    ui->label->setPixmap(QPixmap::fromImage(img));
    
    //定时器时间到,发出timeout信号
    connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);
}

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


void Widget::on_startButton_clicked()
{
    timer->start(TIMEOUT);
}

void Widget::timeoutSlot()
{
    QString path("地址");
    path += QString::number(picID);
    path+=".png";

    QPixmap pix(path);
    ui->label->setPixmap(pix);

    picID++;
    if(5==picID)
        picID=1;
}

void Widget::on_stopButton_clicked()
{
    timer->stop();
}

void Widget::on_singleButton_clicked()
{
    QTimer::singleShot(1000,this,SLOT(timeoutSlot()));
}

标签:Widget,定时器,clicked,QT,void,timer,如何,picID,ui
From: https://blog.csdn.net/qq_43540141/article/details/140433402

相关文章

  • 大一菜鸡QT大作业之五子棋
    作者本人为大一即将结束的菜鸡一枚,刚刚完成了暑期课程,上交了自己的QT编程项目----五子棋游戏,较为简陋,由于不打算投入大量时间(只投入了不到一个星期),且不会五子棋人机对战的算法,所以本人的项目是由自己在开源网站上搜索到的两个五子棋项目修改而成,该五子棋具有人人对战,人机对战,联......
  • 重生归来,从 996福报 到 N+1告别职场【如何封装一个支持图片和PDF在线预览的Vue组件】
    如何封装一个支持图片和PDF在线预览的Vue组件在本文中,我将介绍如何设计并实现一个Vue组件,该组件能够在线预览图片和PDF文件。我们将基于element-ui的elImageViewer组件进行改造,并使用vue-pdf插件来实现PDF预览功能。本文将详细介绍从设计思路到落地实现的全过程,完整代码在......
  • 如何轻松地将 iTunes 备份中的联系人恢复到 iPhone?
    通讯录作为iPhone上最重要的数据类型之一,对我们的日常生活影响很大。如果您之前已经对联系人进行了iTunes备份,并且想要从iTunes备份中恢复联系人,您可以按照本文中的三种简单方法轻松从iPhone备份中获取联系人。第1部分。如何通过CoolmusteriPhoneDataRecovery......
  • 【Python】使用PySide6 + Qt Designer创建简易用户界面(含用户交互)
    【Python】使用PySide6+QtDesigner创建简易用户界面(含用户交互)文章目录【Python】使用PySide6+QtDesigner创建简易用户界面(含用户交互)相关代码运行环境操作过程1.PySide6和QtDesigner的安装2.创建外部工具PyUIC和QtDesigner3.QtDesigner的简单使用说明4.完整代......
  • spring 服务端如何设置 Last-Modified If-Modified-Since
    在Spring框架中,设置HTTP响应头Last-Modified和处理请求头If-Modified-Since是优化缓存和减少不必要数据传输的常用策略。SpringMVC提供了灵活的机制来实现这一点。设置Last-Modified响应头要在SpringMVC中设置Last-Modified响应头,你可以在你的Controller方法中返回一个Respons......
  • spring 服务端如何设置 If-None-Match 和 ETAG
    在Spring框架中,特别是使用SpringMVC或SpringBoot时,设置ETag和处理If-None-Match请求头通常是通过一些自定义的逻辑来实现的,因为SpringMVC本身不直接提供自动化的ETag生成和验证机制。不过,你可以通过以下几种方式来实现:1.使用拦截器(Interceptor)或过滤器(Filter)你可以创建一个......
  • 如何在Java中实现基于Kafka的事件驱动架构
    如何在Java中实现基于Kafka的事件驱动架构大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!事件驱动架构在现代分布式系统中被广泛应用,它通过异步事件传递来解耦系统中的各个组件,提高系统的可扩展性和灵活性。ApacheKafka作为一个高吞吐量的分布式消息队......
  • springboot整合mqtt
    安装emqxhttps://blog.csdn.net/weixin_41542513/article/details/134328627springboot整合mqtt1、引入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-integration&l......
  • 如何快速排查线上问题 -copy qf
    排查流程图flowchartTBA-->B-->C-->D-->EsubgraphA[认识问题]A1[收集信息]A2[确认问题]A3[复现问题]A4[影响范围]A1-->A2-->A3-->A4endsubgraphB[诊断/确认问题]B1[检查网络连接]......
  • Qt区分鼠标按下时移动的是哪个多边形
    使用不同的鼠标事件处理器:为每个多边形分配不同的事件处理器,或者在同一个处理器中使用逻辑来区分。检查鼠标点击位置:在鼠标按下事件中,检查鼠标的位置是否在某个多边形的边上或顶点上。使用图形的标识符:给每个多边形分配一个唯一的标识符,并在鼠标事件中使用这个标识符来识......