1.項目架構
1.UI界面
2.widget.h?
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>#define TIMEOUT 1 * 1000
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);virtual void timerEvent(QTimerEvent *event);~Widget();private slots:void on_startButton_clicked();void on_pardonButton_clicked();private:Ui::Widget *ui;int myTimerId;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);picId = 2;QPixmap pix("/data/wzh/QT/Qt_1/picture/1.png");ui->label->setPixmap(pix);
}Widget::~Widget()
{delete ui;
}void Widget::on_startButton_clicked()
{//開啟定時器,返回定時器編號myTimerId = this->startTimer(TIMEOUT);}void Widget::timerEvent(QTimerEvent *event)
{if (event->timerId() != myTimerId)return;QString path("/data/wzh/QT/Qt_1/picture/");path += QString::number(picId);path += ".png";QPixmap pix(path);ui->label->setPixmap(pix);picId++;if (5 == picId)picId = 1;
}void Widget::on_pardonButton_clicked()
{this->killTimer(myTimerId);
}
2. 程序講解
1. 初始化界面
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);picId = 2;QPixmap pix("/data/wzh/QT/Qt_1/picture/1.png");ui->label->setPixmap(pix);
}
-
界面設置:構造函數中初始化UI組件。
-
圖片加載:使用
QPixmap
加載第一張圖片并顯示在QLabel
上。 -
初始圖片ID:設置
picId
為2,表示下一張圖片的ID。
2. 啟動定時器
void Widget::on_startButton_clicked()
{// 開啟定時器,返回定時器編號myTimerId = this->startTimer(TIMEOUT);
}
-
定時器啟動:點擊“開始”按鈕時,調用
startTimer
方法啟動定時器。 -
定時器ID:
startTimer
返回定時器的唯一標識符,用于后續的定時器事件處理。
3. 定時器事件處理
void Widget::timerEvent(QTimerEvent *event)
{if (event->timerId() != myTimerId)return;QString path("/data/wzh/QT/Qt_1/picture/");path += QString::number(picId);path += ".png";QPixmap pix(path);ui->label->setPixmap(pix);picId++;if (5 == picId)picId = 1;
}
-
事件過濾:檢查事件的定時器ID是否與我們啟動的定時器ID匹配。
-
圖片路徑構造:根據
picId
構造圖片的完整路徑。 -
圖片加載與顯示:使用
QPixmap
加載圖片并更新QLabel
顯示。 -
圖片ID循環:
picId
遞增,當達到5時重置為1,實現循環播放。
4. 停止定時器
void Widget::on_pardonButton_clicked()
{this->killTimer(myTimerId);
}
-
停止定時器:點擊“停止”按鈕時,調用
killTimer
方法停止定時器。