cpp
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
// 需要对timerEvent函数进行重写
virtual void timerEvent(QTimerEvent* event);
~Widget();
private slots:
void on_startTimer_clicked();
void on_killTimer_clicked();
private:
Ui::Widget *ui;
int eventId; // 定时器返回的唯一id,用于区分不同定时器
int pictureId=1; // 不同图片的编号
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#define TIME_OUT 1 * 1000
/**
QObject中有定时器,可以直接进行使用startTimer和killTimer操作
但需要对timerEvent进行重新定义,以自己的方式处理定时器
*/
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QString path("D:\\workspace\\qt\\Timer\\");
path += QString::number(this->pictureId)+".jpg";
QPixmap pix(path);
ui->label->setPixmap(pix);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_startTimer_clicked()
{
// 开启定时器
// QObject中有定时器,直接使用,Widget->QWidget->QObject
this->eventId = this->startTimer(TIME_OUT);
}
void Widget::timerEvent(QTimerEvent* event) {
// 获取timerId是否为开启定时器所操作的
if (event->timerId() == this->eventId) {
QString path("D:\\workspace\\qt\\Timer\\");
path += QString::number(this->pictureId)+".jpg";
QPixmap pix(path);
ui->label->setPixmap(pix);
this->pictureId++;
if (this->pictureId == 5) {
this->pictureId = 1;
}
}
}
void Widget::on_killTimer_clicked()
{
this->killTimer(this->eventId);
}