QT定时器的使用
- 1. QTimer介绍
- (1)QTimer的使用方法步骤
- 示例代码1:定时器的启动和关闭
- 现象:
- 示例代码2:定时器每隔1s在标签上切换图片
- 现象:
- (2)实际开发的作用
- 2.日期 QDate
- (1)主要方法
- 3.时间 QTime
- (1)主要方法
- 示例代码:
- 现象:
1. QTimer介绍
QTimer是Qt中提供的一个定时器类,它可以定时触发一个信号,用于周期性执行一些操作。使用QTimer,可以轻松地实现定时器功能,如周期性地更新UI界面,周期性地执行一些任务等。
(1)QTimer的使用方法步骤
第一步:定义QTimer的对象
QTimer(QObject *parent = Q_NULLPTR)
参数:parent --》this指针
第二步:设置超时时间(定时时间)
void setInterval(int msec)
参数:msec --》毫秒
第三步:启动定时器
void QTimer::start()
超时时间一旦到了,QTimer对象会自动触发timeout()信号,程序员只需要关联这个信号,在自定义的槽函数去实现自己的代码逻辑即可
第四步:关闭定时器
void QTimer::stop()
示例代码1:定时器的启动和关闭
// widget.h
#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);
~Widget();
private slots:
void onTimeout();
void onStartTimer();
void onStopTimer();
private:
Ui::Widget *ui;
QTimer *myTimer;
};
#endif // WIDGET_H
// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
#include <QDebug>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 初始化定时器对象
myTimer = new QTimer(this);
// 设置定时时间(超时时间)
myTimer->setInterval(1000);
// 时间到了QTimer的对象会自动触发timeout信号
connect(myTimer, SIGNAL(timeout()), this, SLOT(onTimeout()));
// 关联启动定时器按钮的槽函数
connect(ui->btn_start, SIGNAL(clicked()), this, SLOT(onStartTimer()));
// 关联关闭定时器按钮的槽函数
connect(ui->btn_close, SIGNAL(clicked()), this, SLOT(onStopTimer()));
}
Widget::~Widget()
{
delete ui;
}
void Widget::onTimeout()
{
qDebug()<<"hello world";
}
void Widget::onStartTimer()
{
qDebug()<<"StartTimer";
myTimer->start();
}
void Widget::onStopTimer()
{
qDebug()<<"stopTimer";
myTimer->stop();
}
现象:
示例代码2:定时器每隔1s在标签上切换图片
// widget.h
#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);
~Widget();
private slots:
void on_pushButton_clicked();
void fun();
void on_pushButton_2_clicked();
private:
Ui::Widget *ui;
QStringList piclist;
QTimer *mytimer;
int n; //图片的下标
};
#endif // WIDGET_H
// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//把所有要显示的图片存放到字符串列表中
n=0;
piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\1.png");
piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\2.png");
piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\3.png");
piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\4.png");
piclist.append("C:\\Users\\LimingRong\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\5.png");
//初始化定时器
mytimer=new QTimer(this);
mytimer->setInterval(1000); //1秒
connect(mytimer,SIGNAL(timeout()),this,SLOT(fun()));
}
Widget::~Widget()
{
delete ui;
}
//启动定时器
void Widget::on_pushButton_clicked()
{
mytimer->start();
}
void Widget::fun()
{
//每隔一秒钟在标签上切换显示图片
QPixmap map(piclist.at(n));
map.scaled(ui->label->width(),ui->label->height());
ui->label->setScaledContents(true);
ui->label->setPixmap(map);
//由于只有5张(piclist.size())图片,n不可以无限制++
if(n<piclist.size()-1)
n++;
else
n=0;
}
void Widget::on_pushButton_2_clicked()
{
mytimer->stop();
}
现象:
(2)实际开发的作用
定时器替代死循环/循环
2.日期 QDate
(1)主要方法
[static] QDate QDate::currentDate()
返回值:QDate的对象,表示当前系统的日期
int QDate::year() const
返回值:返回年
int QDate::month() const
返回值:返回月
int QDate::day() const
返回值:返回日
toString("yyyy-MM-dd")
把日期转换成字符串
3.时间 QTime
(1)主要方法
[static] QTime QTime::currentTime()
返回值:QTime对象,表示当前系统的时间
int QTime::hour() const
int QTime::minute() const
int QTime::second() const
toString("hh:mm:ss")
把时间转换成字符串
示例代码:
// widget.h
#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);
~Widget();
public slots:
void onUpdateTime(void);
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QTime>
#include <QTimer>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 1.实例化定时器对象
QTimer *timer = new QTimer;
// 2.定时器启动后会以指定的间隔时间发射timeout信号,关联对应的槽函数,执行对应的操作
connect(timer, &QTimer::timeout, this, &Widget::onUpdateTime);
// 3.启动定时器 1s定时
timer->start(1000);
}
Widget::~Widget()
{
delete ui;
}
void Widget::onUpdateTime()
{
// 显示到标签上
ui->label_2->setText(QTime::currentTime().toString());
}