QT定时器QObiect/QTimer
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()));
}
多了单次触发