【QT小实例】使用定时器

最近得我再学习如何使用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()));
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光酱ZG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值