Wyświetlanie czasu



  • Witam
    Napisałem program, który ma mierzyć czas jaki upłynął od zdarzenia X, wszystko działa kiedy wyświetlam czas w sekundach ,
    problem zaczyna się gdy chcę wyświetlić czas w formacie hh:mm:ss. Próbuję to zrobić w dość prymitywny sposób:
    co sekundę zwiększam zmienną odpowiedzialną za sekundy i po osiągnięciu przez nią wartości 59 zwiększam o jeden zmienną odpowiedzialną za minuty kiedy ona osiągnie wartość 59 zwiększam zmienną odpowiedzialną za godziny. Wszystko w pętli powtarzane co sekundę

    ui->setupUi(this);
        QTimer *timer = new QTimer(this);
        connect(timer,SIGNAL(timeout()),this,SLOT(on_pushButton_clicked()));
                timer->start(1000);
    
    
    void MainWindow::on_pushButton_clicked()
    {
        query = QSqlQuery(db);
    
        query.exec("SELECT * FROM `wezwanie`");
        query.first();
    
        if (query.isActive())
        {
            ui->statusBar->showMessage("Connected");
            query.first();
    
        
            while(query.next())
            {
                if(query.value(3)=="1" && query.value(0)=="14")
                {
                    ui->lmitpixkjp->show();
                     lcdmitsui1++;
                     ui->lcdmitsui->display(lcdmitsui1);
    
                     if (lcdmitsui1==59)
                       {
                         m14k++;
                         lcdmitsui1=0;
                         ui->lcdmitsui_2->display(m14k);
    
                       }
                     if (m14k>=59)
                      {
                        h14k++;
                        m14k=0;
                        ui->lcdmitsui_2->display(0);
                        ui->lcdmitsui_3->display(h14k);
                      }
    }
    

    Problem w tym że po osiągnięciu przez zmienną minut (m14k) wartości 59 LCD nie zeruje się i liczy dalej 60, 61 ...
    Dziwne jest to że po osiągnięciu wartości 99 zaczyna wskazywać dobrze.

    Może ktoś wpadnie na pomysł co zrobiłem źle lub zna inny sposób na wyświetlenie upływającego czasu w formacie hh:mm:ss



  • @Etro said in Wyświetlanie czasu:
    Czołem.
    Pomijając umieszczenie liczników wewnątrz warunków (jak rozumiem dla Ciebie jest to konieczne) - dlaczego nie użyjesz QTime? Klasa umożliwia pomiar czasu oraz wyświetlanie go z dowolną maską.



  • Dzięki za wskazówkę, nie wiem tylko jak wystartować QTime od 00:00:00. W tej chwili wyświetla aktualny czas:

                   t.start();
                   text=t.toString("hh:mm:ss");
                   ui->lcdmitsui_3->display(text);
    

    mógłbyś coś podpowiedzieć ?



  • @Etro Użyj metody elapsed() do pobrania wartości czasu jaka upłynęła od start(). Wszystko jest w dokumentacji.
    Pamiętaj tylko że elapsed() zwraca milisekundy więc konieczna będzie konwersja do QString a potem znów do QTime (są do tego metody statyczne).



  • @artwaw dziękuję za Twój czas i wiedzę, nie poradziłem sobie z elapsed(), ale użyłem innego rozwiązania.

    if(query.value(3)=="1" && query.value(0)=="14")
               {
                  ui->lmitpixkjp->show();     
                 t14++;
                 s=t14%60;
                 m=t14/60%60;
                 h=t14/3600;
    
                ui->lcdmitsui->display(h);
                 ui->lcdmitsui_2->display(m);
                 ui->lcdmitsui_3->display(s);
    
                 }
    


  • @Etro Jeśli działa to działa. Ponieważ wynik elapsed() jest w milisekundach musisz podzielić przez 100 żeby otrzymać sekundy i tak dalej.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.