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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\1.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\2.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\3.png");piclist.append("C:\\Users\\xxx\\Desktop\\vm_shared\\code\\QT_proj\\250414_timerSwitchPic\\res\\4.png");piclist.append("C:\\Users\\xxx\\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++;elsen=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_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic: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());
}