【QT】定时器

Qt定时器:

QObject:开始定时器startTimer  结束定时器killTimer  

类 QTimer

QObject设置定时器

设计一个定时转换图片功能

首页图片是在标签上显示,需要使用到label控件

设置两个按钮,分别是开始按钮和暂停按钮

确定按钮点击后:

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

构造函数timerEvent 事件

void Widget::timerEvent(QTimerEvent *event)
{
    //首先判断是否为所需的定时器
    if(event->timerId() != myTimerID)
        return;
    //构建路径
    QString path("C:\\Users\\30281\\Desktop\\壁纸\\");
    //将图片ID转化为字符串类型添加到路径后面
    path +=QString::number(picID);
    path +=".jpg";

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

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

展示图片采用QPixmap

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

    QPixmap pix("C:\\Users\\30281\\Desktop\\壁纸\\1.jpg");
    ui->label->setPixmap(pix);
}

运行后发现存在图片只能展示一个角,在设计界面,选中Label

勾选中scaledContents,使得图片自动适配标签

暂停按钮:

void Widget::on_pushButton_2_clicked()
{
    //杀死指定的定时器
    this->killTimer(myTimerID);
}

完整代码

widget.cpp:

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

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

    QPixmap pix("C:\\Users\\30281\\Desktop\\壁纸\\1.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("C:\\Users\\30281\\Desktop\\壁纸\\");
    //将图片ID转化为字符串类型添加到路径后面
    path +=QString::number(picID);
    path +=".jpg";

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

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

void Widget::on_pushButton_2_clicked()
{
    //杀死指定的定时器
    this->killTimer(myTimerID);
}

widget.h:xuya

#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 QWidget
{
    Q_OBJECT

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

private slots:
    void on_startButton_clicked();

    void on_pushButton_2_clicked();

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

需要注意的需要将图片的名字改为连续的数字才行。 

QTimer定时器

此处换了一种显示图片的方法,这里采用QImage来实现。

完整代码如下:

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;
    picID=2;

    //显示一张图片
    QImage img;
    img.load("C:\\Users\\30281\\Desktop\\壁纸\\1.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("C:\\Users\\30281\\Desktop\\壁纸\\");
    path +=QString::number(picID);
    path +=".jpg";

    QImage img;
    img.load(path);
    ui->label->setPixmap(QPixmap::fromImage(img));

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

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

 widget.h:

#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 slots:
    void on_startButton_clicked();
    void timeoutslot();

    void on_pushButton_2_clicked();

private:
    Ui::Widget *ui;
    QTimer *timer;
    int picID;
};
#endif // WIDGET_H

设置一个下一张的按钮,按一下显示一张照片:

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值