Qt QLCDNumber问题

时间:2017-01-16 12:38:08

标签: c++ qt timer qtimer qlcdnumber

我正在使用Qt Creator制作计时器/秒表。但是,我的重置功能(单击重置按钮)无法正常工作。我希望它停止计时器并将显示(QLCDNumber)设置为0.相反,计时器停止但显示数字保持不变,就像单击暂停按钮一样。除了再次启动计时器(单击开始按钮)时,它会从原始时间重新开始(我希望它能够这样做)。这是代码。

我只包含了问题中的部分。

void MainWindow::delay()
{
    QTime dieTime = QTime::currentTime().addSecs(1);
    while (QTime::currentTime() < dieTime && !spause && !sreset)
    {
        QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
        std::this_thread::sleep_for(std::chrono::milliseconds(1));
    }
}

void MainWindow::on_tstart_clicked()
{
    ttime = treset ? 0 : ttime;
    tpause = treset = false;
    ttime = ttime == 0 ? (ui->hr->value() * 3600 + ui->min->value() * 60 + ui->sec->value()) : ttime;
    while (ttime >= 0 && !tpause && !treset)
    {
        const unsigned short sec = ttime % 3600 % 60, min = ttime % 3600 / 60, hr = ttime / 3600;
        ui->tsec2->display(sec % 10);
        ui->tsec1->display(sec / 10);
        ui->tmin2->display(min % 10);
        ui->tmin1->display(min / 10);
        ui->thr2->display(hr % 10);
        ui->thr1->display(hr / 10);
        delay();
        if (!tpause && !treset) --ttime;
    }
}

void MainWindow::on_tpause_clicked()
{
    tpause = true;
}

void MainWindow::on_treset_clicked()
{
    treset = true;
    ui->ssec2->display(0);
    ui->ssec1->display(0);
    ui->smin2->display(0);
    ui->smin1->display(0);
    ui->shr2->display(0);
    ui->shr1->display(0);
}

3 个答案:

答案 0 :(得分:0)

仅在包含processEvents()的函数延迟()中处理您对按钮的单击。执行delay()后,它会向应用程序发送消息,但{/ 1}}在on_treset_clicked()的下一个循环启动后执行 。使用while()来避免这种情况。

以下是如何在您的案例中使用QTimer。

QTimer

答案 1 :(得分:0)

(代表OP发布)

一切都解决了!我意外地重置了秒表显示器。谢谢@Michael!

      .container{display:flex;align-items:flex-end;} 
      #div1{ flex-basis:100px; }    
 #div2{flex-basis:200px;}
 //Flex-basis is the  width of divs

答案 2 :(得分:0)

我在我的代码中实现了QTimer,但是当我按下&#34;开始&#34;按钮(on_tstart_clicked)或任何其他按钮,没有任何反应(显示没有变化)。

[10] [150]
[10 10.3] [ 150 150.3]

问题很简单,但我一直在掩饰它。我不得不将ttimer.isActive()更改为!ttimer.isActive()。

但是,现在重置(on_treset_clicked)不起作用。 QLCDNumber不会重置为0.