定时器
QObject 定时器
QObject 定时器主要有以下两个函数:
- 开启定时器:
startTimer
- 关闭定时器:
killTimer
开启定时器
通过调用 startTimer
传入需要开启的定时器的定时时长, 即可开启定时器, 同时返回当前定时器的编号。
| // start button 被点击, 开启定时器
void MainWindow::on_Start_Button_clicked()
{
// 当前窗口 Widget 继承于 QObject 类, 这里可以使用 this 访问 QObject
// 传入的参数为定时时长
// startTimer 执行后返回当前定时器的编号
myTimerID = this->startTimer(TIMEOUT);
}
|
在定时器循环达到设定值的时候, 会执行一个虚函数。
| class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
// 虚函数 timeerEvent
virtual void timerEvent(QTimerEvent *event);
~MainWindow();
private slots:
void on_Start_Button_clicked();
private:
Ui::MainWindow *ui;
// QObject 定时器ID
int myTimerID;
};
#endif // MAINWINDOW_H
|
触发函数
通过在对应的回调函数内书写代码, 即可实现定时器触发函数。
| // 定时器达到设定值, 触发函数
void MainWindow::timerEvent (QTimerEvent *event){
// 判断触发的定时器 ID 号
if (event->timerId() != myTimerID){
return;
}
// 需要实现的功能
QString path("E:\\SYSTEM\\pic\\Temp\\");
path += QString::number(picId);
path += ".png";
QPixmap pix(path);
ui->label->setPixmap(pix);
picId++;
if (picId == 5){
picId = 1;
}
}
|
关闭定时器
通过调用 killTimer
即可关闭指定的定时器。
| // 关闭定时器的槽函数
void MainWindow::on_Stop_Button_clicked()
{
// 杀死指定的定时器, 传入需要关闭的定时器的 ID
this->killTimer(myTimerID);
}
|
QTimeer 定时器
开启定时器
-
QTimer 在使用前需要包含相应的头文件: #include <QTimer>
-
创建 QTimer 类指针: QTimer *timer;
-
初始化 timer : timer = new QTimer;
-
在对应的槽函数中开启定时器: timer -> start(TIMEOUT)
触发函数
QTimer 达到预定的时间后, 就会发出一个信号, 将这个绑定至槽函数即可实现触发对应函数。
-
槽函数: void timeoutSlot ();
-
将信号与槽绑定: connect (timer, &QTimer::timeout, this, &Widget::timeoutSlot);
关闭定时器
关闭 QTimer 定时器仅需要执行 stop
方法即可。
timer -> stop;
拓展用法
单次定时
QTimer 可以实现计时器仅执行一次后便关闭。
QTimer::singleShot()
这个方法有三个参数