Qt基础知识记录(第五篇)

前情提要

前几次介绍了Qt的基础知识,完成了一个简单窗口、一个计算器、一个QObject实现的简单轮播相册,由于Qt里提供了QTimer,所以实际上不需要用QObject。所以这一篇要用QTimer实现一个轮播相册

开发过程

(1)创建项目

依旧是widget、qmake,项目命名为QTimer

(2)设计UI

有了上次的经验,这次能更快上手,提前把scaledContents勾选上

(3)处理开始和结束按钮

先把开始和结束两个按钮转到槽,然后包含引用头文件,宏定义一个时间步长,并创建一个QTimer型的指针对象作为窗口类的私有成员

#include <QTimer>
#define TIMEOUT 1000
QTimer *timer;
timer = new QTimer;
void Widget::on_startButton_clicked()
{
    timer->start(TIMEOUT);
}

下面是显示图片的代码:

    QImage img;
    img.load("E:\\ObiectTimer\\1.jpg");
    ui->label->setPixmap(QPixmap::fromImage(img));

这段代码写在构造函数里

这个项目首次用到connect函数:

//定时器时间到,发出timeout信号
    connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);

这个参数的意思是:传信号者,传信号函数,收信号者,要调用的函数

要调用的槽函数是这个:

void Widget::timeoutSlot()
{
    QString path("E:\\ObiectTimer\\");
    path += QString::number(picID);
    path+=".jpg";

    QImage img;
    img.load(path);
    ui->label->setPixmap(QPixmap::fromImage(img));
    picID++;
    if(picID==4)
    {
        picID=1;
    }
}

原理就是轮换地址

下面实现结束按钮:

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

注意:前边new了一个QTimer的对象,那我们配套的要在析构函数里写一个delete

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

这样就实现了简易轮播相册。

仅仅这么看,QObject和QTimer似乎没有多大区别,都是开始,结束,再开始,再结束

但是QTImer可以只进行一次时间步长

(4)增加单次功能

我们在ui里添加一个单次按钮,用它的槽函数来实现只进行一次时间步长。

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

传入参数的意思是:时间步长,处理者,用哪一个槽函数处理

学到的知识

(1)两个计时器的区别

1.QObject是继承关系中最高级的基类,它的主要功能是事件处理而非定时器,QTimer是继承QObject的,它是专门用于定时器功能的类

2.单就定时器功能实现来看,QObject不能单次触发,QTimer可以单次触发

(2)conncet函数

信号只需声明无需实现,槽就是具体实现方法,connect函数负责把发出信号的、信号、接受信号的、实现方法联系起来

(3)新的添加图片的方法

使用QImage类定义对象,再用它的对象调用load成员函数,然后用ui->setPix函数展示图片

本项目比较简单,重点在于QTimer的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值