QT定时器
一、QObiect:
startTimer ----------- killTimer
电子相册,利用定时器轮播图片
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);picID = 2;QPixmap pix("D:\\CandCPP\\Picture\\1.jpg");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("D:\\CandCPP\\Picture\\");path += QString::number(picID);path += ".jpg";QPixmap pix(path);ui->label->setPixmap(pix);picID++;if (picID>5)picID = 1;
}void Widget::on_stopButton_clicked()
{this->killTimer(myTimerId);
}
初始化:
构造函数 (Widget::Widget):
初始化 picID 为 2
加载并显示第一张图片 1.jpg 到 label 上
槽函数:
on_startButton_clicked:
启动定时器,间隔由 TIMEOUT 决定。
保存定时器 ID 到 myTimerId。
timerEvent:
检查事件的定时器 ID 是否与 myTimerId 匹配
构建下一张图片的路径
加载并显示图片
更新 picID,循环显示 1.jpg 到 5.jpg
on_stopButton_clicked:
停止定时器,停止图片轮播
二、QTimer:
QTimer类提供了定时器信号和单触发定时器
创建一个QTimer,使用start ()来开始并且把它的timeout ()连接到适当的槽。当这段时间过去了,它将会发射timeout()信号
#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("D:\\CandCPP\\Picture\\1.jpg");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("D:\\CandCPP\\Picture\\");path += QString::number(picID);path += ".jpg";QImage img;img.load(path);ui->label->setPixmap(QPixmap::fromImage(img));picID++;if (picID>5)picID = 1;
}void Widget::on_stopButton_clicked()
{timer->stop();
}void Widget::on_singleButton_clicked()
{QTimer::singleShot(1000, this, SLOT(timeoutSlot()));
}
多了单次触发