最近得我再学习如何使用QT来编写计时器,也学习到2种图片的显示方式:
Qobject定时器
1.通过Qobject来做定时器,首先,我们需要在Headers里需要添加来设置一个计时器,计时多长时间,它是以毫秒为单位的,这边我们以1000毫秒为例,
#define TIMEOUT 1*1000
在开启计时器的时候,开始计时器,我们使用的startTimer()
myTimerId =this->startTimer(TIMEOUT);
停止计时器,使用的killTimer()
this->killTimer(myTimerId);
以下是通过Qobject计时器来做切换图片,header的代码如下:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#define TIMEOUT 1*1000
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget: public Widget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
virtual void timerEvent(QTimerEvent *event);
~Widget();
private:
Ui::Widget *ui;
int myTimerId;
int picID;
private slots:
void on_startButton_clicked();
void on_stopButton_clicked();
};
#endif // WIDGET_H
主程序代码如下:
#include "Widget.h"
#include "ui_Widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
picID=2;
QPixmap pix("地址\\*.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("地址");
path += QString::number(picID);
path+=".jpg";
QPixmap pix(path);
ui->label->setPixmap(pix);
picID++;
if(5==picID)
picID=1;
}
void Widget::on_stopButton_clicked()
{
this->killTimer(myTimerId);
}
这样就可以完成图片轮播的效果啦~
QTimer定时器
如果使用QTimer来实现的话,那操作会有些许不同,我们会使用到timer->start()
timer->start(TIMEOUT);
而结束也会有所不同,我们直接用到的是 timer->stop()
timer->stop();
以下是通过QTimer计时器来做切换图片,header的代码如下:
#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:
Ui::Widget *ui;
QTimer *timer;
int picID;
private slots:
void on_startButton_clicked();
void timeoutSlot();
void on_stopButton_clicked();
void on_singleButton_clicked();
};
#endif // WIDGET_H
主程序代码如下:
#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("地址\\*.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("地址");
path += QString::number(picID);
path+=".png";
QPixmap pix(path);
ui->label->setPixmap(pix);
picID++;
if(5==picID)
picID=1;
}
void Widget::on_stopButton_clicked()
{
timer->stop();
}
void Widget::on_singleButton_clicked()
{
QTimer::singleShot(1000,this,SLOT(timeoutSlot()));
}
标签:Widget,定时器,clicked,QT,void,timer,如何,picID,ui
From: https://blog.csdn.net/qq_43540141/article/details/140433402