在插槽中停止QTIMER

Stop Qtimer in a slot

本文关键字:QTIMER 插槽      更新时间:2023-10-16

我创建了一个启动qtimer的插槽,它必须增加变量,当它达到一定值时,必须停止。这是代码:

void MainWindow::on_start_clicked() {
    b = 95;
    m_timer->start(1000);
    if (b == 98) {
        m_timer->stop();
        return;
    };
}

m_timer = new QTimer(this);
connect(m_timer,SIGNAL(timeout()),this,SLOT(increase()));

void MainWindow::increase() {
    b += 1;
    qDebug() << b;
}

触发时要保持计时器停止,您可以将逻辑添加到插槽中,这就是我要做的,插槽将是:

void MainWindow::on_start_clicked() {
    b = 95;
    m_timer->start(1000);
}

连接将是:

connect(m_timer, &QTimer::timeout, this, &MainWindow::increase);

*上面的连接方法是QT 5建立连接的方式,这是一个编译时间检查,如果无法连接,则会出错;因此,您无需等到运行时间进行检查。

最后,插槽将是:

void MainWindow::increase() {
    if(b >= 98) {
        b++;
        qDebug() << b;
        m_timer->start(1000);
    } else {
        //b has finally reached 98
        m_timer->stop();
    }
}

上面的代码将允许计时器继续每秒触发一次,直到B到达98,一旦达到98,它将在最后一次触发。但是,它不会无限地停止计时器。