QT定时器

实现效果及布局

在这里插入图片描述

ui文件所涉及的对象

在这里插入图片描述
要想图片显示完全就勾选scaleContents

QObject定时器总结

1、QObject定时器是Qobject对象元素,也就是基类元素

在这里插入图片描述

2、需要实现 virtual void timerEvent(QTimerEvent *envent)方法

在这里插入图片描述

QTimerEvent *envent的参数就可以获取当前定时器是哪一个编号

3、this->startTimer(TIMEOUT);是开启QObject定时器的方法,该方法会返回一个定时器的编号,返回值是int类型,所以要用int变量Objectimerid去接收他的值

在这里插入图片描述

4、void timerEvent(QTimerEvent *envent)方法是每一个QObject定时器定时器都会调用的虚函数,所以根据envent中的timerId方法进行提取定时器的Id跟开始的int Id进行对比执行相应的代码

在这里插入图片描述

5、停止时钟使用killTimer()方法,参数传递要停止的时钟编号

在这里插入图片描述

实现代码:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>
#include <QPixmap>
#include <QStringList>

#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);
    virtual void timerEvent(QTimerEvent *envent); //QTimerEvent *envent的参数就可以获取当前定时器是哪一个编号
    ~Widget();

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

    void on_pushButton_2_clicked();

    void on_pushButton_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

private:
    Ui::Widget *ui;
    QStringList imgnamelist;
    int id;
    QTimer *timer;
    QString name;
    QString path="C:\\Users\\Administrator\\Desktop\\articlepng\\";
    int Objectimerid;
};
#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);
    timer = new QTimer;//定义一个Timer对象
    this->imgnamelist<<"d5888965427887163d97689ed6f2d5b8.jpeg"<<"d48e7395c21a4f82ba0f77789b93d4f9.jpeg"<<"e52e7a6a8b58fdd1dcbd555c20bc746a.png";
    this->id=0;
    this->name=this->imgnamelist.at(this->id);
    //第一种写法
    // QImage img;
    // img.load(this->path+this->name);
    //ui->label->setPixmap(QPixmap::fromImage(img));
    
	//第二种写法
    QPixmap iconQPixmap(this->path+this->name);
    ui->label->setPixmap(iconQPixmap);
    this->id++;//列表imgnamelist的index加一
}
//析构函数
Widget::~Widget()
{
    delete ui;
}
//开始按钮
void Widget::on_pushButton_3_clicked()
{
    this->Objectimerid=this->startTimer(TIMEOUT);
}


void Widget::timerEvent(QTimerEvent *envent)//每个定时器到时间后都会调用timerEvent定义的虚函数
{
    //只能通过envent指针的timerId函数判断
    if(envent->timerId()==Objectimerid)
     {
        this->name=imgnamelist.at(id);
        // QImage img;
        // img.load(this->path+this->name);
        QPixmap iconQPixmap(this->path+this->name);
        // ui->label->setPixmap(QPixmap::fromImage(img));
        ui->label->setPixmap(iconQPixmap);
        this->id++;
        if(this->imgnamelist.length()==this->id)
            this->id=0;
    }


}

//结束按钮
void Widget::on_pushButton_4_clicked()
{
    this->killTimer(Objectimerid);
}

QTimer定时器总结:

1、创建Timer对象

在这里插入图片描述

2、使用connect函数进行把timer对象计时结束后出发timerout信号与槽函数进行绑定

 connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);

3、使用timer->start(TIMEOUT)进行计时开始

在这里插入图片描述

4、使用timer->stop(); //停止

在这里插入图片描述

实现代码

//widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QTimer>
#include <QPixmap>
#include <QStringList>

#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 slots:
    void on_startbutton_clicked();
    void timeoutSlot();

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QStringList imgnamelist;//定义一个字符串list
    int id;//定义一个访问imgnamelist的index的int类型的变量
    QTimer *timer;
    QString name;//文件名字String
    QString path="C:\\Users\\Administrator\\Desktop\\articlepng\\";//路径String
};
#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);
    timer = new QTimer;//定义一个Timer对象
    this->imgnamelist<<"d5888965427887163d97689ed6f2d5b8.jpeg"<<"d48e7395c21a4f82ba0f77789b93d4f9.jpeg"<<"e52e7a6a8b58fdd1dcbd555c20bc746a.png";
    this->id=0;
    this->name=this->imgnamelist.at(this->id);
    //第一种写法
    // QImage img;
    // img.load(this->path+this->name);
    //ui->label->setPixmap(QPixmap::fromImage(img));
    
	//第二种写法
    QPixmap iconQPixmap(this->path+this->name);
    ui->label->setPixmap(iconQPixmap);
    
    //timer的timerout信号与this的Wiget对象的槽函数timerSlot进行绑定
    connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);
    this->id++;//列表imgnamelist的index加一
}
//析构函数
Widget::~Widget()
{
    delete ui;
}
//开始按钮点击后调用的槽函数
void Widget::on_startbutton_clicked()
{
    timer->start(TIMEOUT);//TIMEOUT是宏定义时间
}
//Timer对象定时结束调用的槽函数
void Widget::timeoutSlot()
{
    this->name=imgnamelist.at(id);//访问imgnamelist索引的元素
    // QImage img;
    // img.load(this->path+this->name);
    // ui->label->setPixmap(QPixmap::fromImage(img));
    
    QPixmap iconQPixmap(this->path+this->name);
    ui->label->setPixmap(iconQPixmap);
    this->id++;//运行槽函数后加1然后再判断imgnamelist列表的长度是否全部展示,然后初始化掉index
    if(this->imgname.length()==this->id)
        this->id=0; //初始化话掉列表imgnamelist的index
}
//结束按钮绑定槽函数
void Widget::on_pushButton_2_clicked()
{
    timer->stop(); //停止
}
执行一次的
void Widget::on_pushButton_clicked()
{
    QTimer::singleShot(1000,this,SLOT(timeoutSlot()));
}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值