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_NAMESPACE
- class Widget : public QWidget
- {
- Q_OBJECT
- public:
- 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,实现单次图片切换。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |