欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > QT图片轮播器实现方法二(QT实操2)

QT图片轮播器实现方法二(QT实操2)

2025/4/3 8:00:27 来源:https://blog.csdn.net/C_say_easy_to_me/article/details/146703887  浏览:    关键词:QT图片轮播器实现方法二(QT实操2)

1.项目架构


1.UI界面


2.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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_startButton_clicked();void timeoutSlot();void on_stopButton_clicked();void on_singleButton_clicked();private:Ui::Widget *ui;QTimer *timer;int picId;
};
#endif // WIDGET_H

3.main.cpp​

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

3.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("/data/wzh/QT/Qt_1/picture/1.png");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("/data/wzh/QT/Qt_1/picture/");path += QString::number(picId);path += ".png";QImage img;img.load(path);ui->label->setPixmap(QPixmap::fromImage(img));picId++;if (5 == picId)picId = 1;
}void Widget::on_stopButton_clicked()
{timer->stop();
}void Widget::on_singleButton_clicked()
{QTimer::singleShot(1000,this,SLOT(timeoutSlot()));
}

2. 程序讲解

1. 初始化界面

Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer;picId = 2;QImage img;img.load("/data/wzh/QT/Qt_1/picture/1.png");ui->label->setPixmap(QPixmap::fromImage(img));// 定时器时间到,发出timeout信号connect(timer, &QTimer::timeout, this, &Widget::timeoutSlot);
}
  • 定时器初始化:创建一个QTimer对象,用于定时触发事件。

  • 图片加载:使用QImage加载第一张图片,并通过QPixmap::fromImage转换为QPixmap显示在QLabel上。

  • 信号槽连接:将定时器的timeout信号连接到timeoutSlot槽函数,确保定时器触发时调用图片切换逻辑。

2. 启动定时器

void Widget::on_startButton_clicked()
{timer->start(TIMEOUT);
}
  • 定时器启动:点击“开始”按钮时,调用timer->start(TIMEOUT)启动定时器,TIMEOUT为定时器的时间间隔(毫秒)。

3. 定时器事件处理

void Widget::timeoutSlot()
{QString path("/data/wzh/QT/Qt_1/picture/");path += QString::number(picId);path += ".png";QImage img;img.load(path);ui->label->setPixmap(QPixmap::fromImage(img));picId++;if (5 == picId)picId = 1;
}
  • 图片路径构造:根据picId构造图片的完整路径。

  • 图片加载与显示:使用QImage加载图片并转换为QPixmap,更新QLabel显示。

  • 图片ID循环picId递增,当达到5时重置为1,实现循环播放。

4. 停止定时器

void Widget::on_stopButton_clicked()
{timer->stop();
}
  • 定时器停止:点击“停止”按钮时,调用timer->stop()停止定时器。

5. 单次定时器

void Widget::on_singleButton_clicked()
{QTimer::singleShot(1000, this, SLOT(timeoutSlot()));
}
  • 单次定时器:点击“单次”按钮时,使用QTimer::singleShot设置一个单次定时器,1000毫秒后触发timeoutSlot,实现单次图片切换。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词