【qt】使用QObject定时器实现简单电子相册

预备步骤(完成界面设计和图片的准备工作)

两个按钮,一个开始,一个暂停,当开始按下,去执行对应的槽函数,在该槽函数里面使用开始计时,设置1s中断一次去切换一下照片,暂停会停止计时器记时,界面设计,使用两个按钮,一个开始,一个暂停,用一个标签来放图片
在这里插入图片描述
修改名称,以及对象名称,便于编程
在这里插入图片描述
开始按钮对象命名为startbutton,暂停按钮对象命名为stopbutton


准备图片:
将你准备好的图片放在一个文件夹,并用1,2,3,4这种命名,以便于切换
在这里插入图片描述

路径为D:\12

编程

1.将开始按钮转到槽,编写槽函数,需要当开始按钮按下,开始计时,需要调用QObject中的startTimer,因为Widget将这个函数继承下来,可以直接用,参数为ms,就是多少毫米去执行对应的中断函数,我们可以定义一个宏,来表示定时时间
在这里插入图片描述
也就是定时1s,因为可能有好多个定时器,startTimer的返回值为定时器的编号,我们使用一个变量来记录他
在这里插入图片描述
所以开始按钮的槽函数为这样

void Widget::on_startbutton_clicked()
{
    eventid=this->startTimer(TIMEOUT);
}

开始按钮按下,执行该函数,到1s的时候,会去执行中断函数,而这个中断函数是在QObject中的,而Widget是他的派生类,我们可以使用多态,来重写基类的中断函数,实现我们的功能
在这里插入图片描述
在widget.cpp中实现该功能,首先我们需要在构造函数里面先贴一张图片,在定义一个变量PID,每次1s中断,改变PID的值,也是改变图片的名称,之前用1,2,3,4,5来命名的,先在构造函数中贴一张图片,使用
在这里插入图片描述

PID=2,说明第一次中断,直接就加载第二张图片了,然后实现中断函数,我们说中断函数是用来切换照片的,我们可以使用一个字符串,因为每个图片不同的只有图片的名称不一样,我们只需要中断一次,改变PID值就可以了

void Widget::timerEvent(QTimerEvent*event)
{

    if(event->timerId()!=eventid)//event是计时的计算器的结构体,看他的编号是不是我们关心的计时器编号,如果不是,直接跳出
    {return ;}

    QString str="D:\\12\\";   //拼接每个图片路径
    str+=QString::number(PID);//图片名称转字符串
    str+=".jpg";//图片后缀

    QPixmap pix(str);//构建图片对象
    ui->label->setPixmap(pix);//图片对象插入标签

    PID++;//下次中断,图片名会修改
    if(PID==11)    //图片名切换
        PID=1;

}

演示:

相册切换

我们发现只能显示一个角,我们可以在ui界面下,点击标签
在这里插入图片描述
会调节图片大小

图片适应

实现暂停:
将暂停键转到槽

void Widget::on_stopbutton_clicked()
{
    this->killTimer(eventid);
}

使用killTimer,然后参数为要暂停的定时器的编号
完整演示:

完整演示

整体代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include<QString>
#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);
    ~Widget();
    virtual void  timerEvent(QTimerEvent*event);

private slots:


    void on_startbutton_clicked();

    void on_stopbutton_clicked();

private:
    Ui::Widget *ui;
    int eventid;

    int PID;
};
#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);

     PID=2;

    QPixmap pix("D:\\12\\1.jpg");
    ui->label->setPixmap(pix);


}

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



void Widget::timerEvent(QTimerEvent*event)
{

    if(event->timerId()!=eventid)
    {return ;}

    QString str="D:\\12\\";
    str+=QString::number(PID);
    str+=".jpg";

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

    PID++;
    if(PID==11)
        PID=1;

}



void Widget::on_startbutton_clicked()
{
    eventid=this->startTimer(TIMEOUT);
}

void Widget::on_stopbutton_clicked()
{
    this->killTimer(eventid);
}
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Qt框架允许我们使用CPU来实现定时器功能。Qt提供了QTimer类,它可以定期触发一个特定的时间间隔,并执行相应的操作。 要使用CPU实现定时器,我们需要以下步骤: 1. 创建一个QTimer对象,并将其连接到需要定期触发的槽函数。可以使用QObject::connect()函数将定时器的timeout()信号连接到一个特定的槽函数。 2. 设置定时器的时间间隔。可以使用QTimer::setInterval()函数设置定时器的时间间隔,单位为毫秒。 3. 启动定时器。可以使用QTimer::start()函数启动定时器。一旦启动,定时器将根据设置的时间间隔定期触发timeout()信号。 4. 实现槽函数。我们可以创建一个槽函数,当定时器触发timeout()信号时,该函数将被执行。在这个函数中,我们可以执行我们想要的操作,例如更新UI界面或执行其他任务。 5. 停止定时器(可选)。如果我们希望不再触发定时器,我们可以使用QTimer::stop()函数停止定时器。这将停止timer触发timeout()信号。 使用CPU实现定时器的一个例子如下: ```cpp #include <QTimer> #include <QObject> class MyObject : public QObject { Q_OBJECT public slots: void mySlot() { // 每次定时器周期触发的操作 qDebug() << "Timeout!"; } }; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); MyObject myObj; QTimer myTimer; QObject::connect(&myTimer, SIGNAL(timeout()), &myObj, SLOT(mySlot())); myTimer.setInterval(1000); // 设置为1秒钟 myTimer.start(); // 启动定时器 return a.exec(); } ``` 在上面的例子中,我们创建了一个名为myTimer的QTimer对象,并将其timeout()信号连接到myObj对象的mySlot()槽函数。设置定时器的时间间隔为1秒,并启动定时器。每次定时器周期结束时,mySlot()槽函数将被调用,并输出"Timeout!"。 通过这种方式,我们可以使用CPU实现一个简单定时器功能。注意,这种实现方式使用了事件循环,因此应用程序需要调用a.exec()进入Qt的事件循环,才能正确触发定时器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

#小多子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值