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

打印 上一主题 下一主题

主题 1497|帖子 1497|积分 4491

1.项目架构


1.UI界面




2.widget.h​


  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QTimer>
  5. #define TIMEOUT 1 * 1000
  6. QT_BEGIN_NAMESPACE
  7. namespace Ui { class Widget; }
  8. QT_END_NAMESPACE
  9. class Widget : public QWidget
  10. {
  11.     Q_OBJECT
  12. public:
  13.     Widget(QWidget *parent = nullptr);
  14.     ~Widget();
  15. private slots:
  16.     void on_startButton_clicked();
  17.     void timeoutSlot();
  18.     void on_stopButton_clicked();
  19.     void on_singleButton_clicked();
  20. private:
  21.     Ui::Widget *ui;
  22.     QTimer *timer;
  23.     int picId;
  24. };
  25. #endif // WIDGET_H
复制代码
3.main.cpp​

  1. #include "widget.h"
  2. #include <QApplication>
  3. int main(int argc, char *argv[])
  4. {
  5.     QApplication a(argc, argv);
  6.     Widget w;
  7.     w.show();
  8.     return a.exec();
  9. }
复制代码
3.widget.cpp​

  1. #include "widget.h"
  2. #include "ui_widget.h"
  3. Widget::Widget(QWidget *parent)
  4.     : QWidget(parent)
  5.     , ui(new Ui::Widget)
  6. {
  7.     ui->setupUi(this);
  8.     timer = new QTimer;
  9.     picId = 2;
  10.     QImage img;
  11.     img.load("/data/wzh/QT/Qt_1/picture/1.png");
  12.     ui->label->setPixmap(QPixmap::fromImage(img));
  13.     //定时器时间到,发出timeout信号
  14.     connect(timer,&QTimer::timeout,this,&Widget::timeoutSlot);
  15. }
  16. Widget::~Widget()
  17. {
  18.     delete ui;
  19. }
  20. void Widget::on_startButton_clicked()
  21. {
  22.     timer->start(TIMEOUT);
  23. }
  24. void Widget::timeoutSlot()
  25. {
  26.     QString path("/data/wzh/QT/Qt_1/picture/");
  27.     path += QString::number(picId);
  28.     path += ".png";
  29.     QImage img;
  30.     img.load(path);
  31.     ui->label->setPixmap(QPixmap::fromImage(img));
  32.     picId++;
  33.     if (5 == picId)
  34.         picId = 1;
  35. }
  36. void Widget::on_stopButton_clicked()
  37. {
  38.     timer->stop();
  39. }
  40. void Widget::on_singleButton_clicked()
  41. {
  42.     QTimer::singleShot(1000,this,SLOT(timeoutSlot()));
  43. }
复制代码
2. 步伐解说

1. 初始化界面

  1. Widget::Widget(QWidget *parent)
  2.     : QWidget(parent)
  3.     , ui(new Ui::Widget)
  4. {
  5.     ui->setupUi(this);
  6.     timer = new QTimer;
  7.     picId = 2;
  8.     QImage img;
  9.     img.load("/data/wzh/QT/Qt_1/picture/1.png");
  10.     ui->label->setPixmap(QPixmap::fromImage(img));
  11.     // 定时器时间到,发出timeout信号
  12.     connect(timer, &QTimer::timeout, this, &Widget::timeoutSlot);
  13. }
复制代码


  • 定时器初始化:创建一个QTimer对象,用于定时触发变乱。
  • 图片加载:利用QImage加载第一张图片,并通过QPixmap::fromImage转换为QPixmap显示在QLabel上。
  • 信号槽毗连:将定时器的timeout信号毗连到timeoutSlot槽函数,确保定时器触发时调用图片切换逻辑。
2. 启动定时器

  1. void Widget::on_startButton_clicked()
  2. {
  3.     timer->start(TIMEOUT);
  4. }
复制代码


  • 定时器启动:点击“开始”按钮时,调用timer->start(TIMEOUT)启动定时器,TIMEOUT为定时器的时间间隔(毫秒)。
3. 定时器变乱处置处罚

  1. void Widget::timeoutSlot()
  2. {
  3.     QString path("/data/wzh/QT/Qt_1/picture/");
  4.     path += QString::number(picId);
  5.     path += ".png";
  6.     QImage img;
  7.     img.load(path);
  8.     ui->label->setPixmap(QPixmap::fromImage(img));
  9.     picId++;
  10.     if (5 == picId)
  11.         picId = 1;
  12. }
复制代码


  • 图片路径构造:根据picId构造图片的完备路径。
  • 图片加载与显示:利用QImage加载图片并转换为QPixmap,更新QLabel显示。
  • 图片ID循环:picId递增,当达到5时重置为1,实现循环播放。
4. 停止定时器

  1. void Widget::on_stopButton_clicked()
  2. {
  3.     timer->stop();
  4. }
复制代码


  • 定时器停止:点击“停止”按钮时,调用timer->stop()停止定时器。
5. 单次定时器

  1. void Widget::on_singleButton_clicked()
  2. {
  3.     QTimer::singleShot(1000, this, SLOT(timeoutSlot()));
  4. }
复制代码


  • 单次定时器:点击“单次”按钮时,利用QTimer::singleShot设置一个单次定时器,1000毫秒后触发timeoutSlot,实现单次图片切换。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表