在一个插槽中停止Qtimer

时间:2018-04-02 13:59:03

标签: c++ qt qt5 qtimer

我创建了一个启动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;
}

1 个答案:

答案 0 :(得分:0)

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

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,它将最后一次触发。但是,不是将b增加1,而是无限期地停止计时器。

相关问题