跳转至

定时器

QObject 定时器


QObject 定时器主要有以下两个函数:

  • 开启定时器: startTimer
  • 关闭定时器: killTimer

开启定时器


 通过调用 startTimer 传入需要开启的定时器的定时时长, 即可开启定时器, 同时返回当前定时器的编号。

1
2
3
4
5
6
7
8
// 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 即可关闭指定的定时器。

1
2
3
4
5
6
// 关闭定时器的槽函数
void MainWindow::on_Stop_Button_clicked()
{
    // 杀死指定的定时器, 传入需要关闭的定时器的 ID
    this->killTimer(myTimerID);
}

QTimeer 定时器


开启定时器


  1. QTimer 在使用前需要包含相应的头文件: #include <QTimer>

  2. 创建 QTimer 类指针: QTimer *timer;

  3. 初始化 timer : timer = new QTimer;

  4. 在对应的槽函数中开启定时器: timer -> start(TIMEOUT)

触发函数


 QTimer 达到预定的时间后, 就会发出一个信号, 将这个绑定至槽函数即可实现触发对应函数。

  1. 槽函数: void timeoutSlot ();

  2. 将信号与槽绑定: connect (timer, &QTimer::timeout, this, &Widget::timeoutSlot);

关闭定时器


关闭 QTimer 定时器仅需要执行 stop 方法即可。

timer -> stop;

拓展用法


单次定时

 QTimer 可以实现计时器仅执行一次后便关闭。

QTimer::singleShot()

这个方法有三个参数

  • 延时时间 (ms)
  • 谁来执行
  • 槽函数