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());
}