Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Wyświetlanie czasu
Qt 6.11 is out! See what's new in the release blog

Wyświetlanie czasu

Scheduled Pinned Locked Moved Solved Polish
6 Posts 2 Posters 3.8k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • E Offline
    E Offline
    Etro
    wrote on last edited by
    #1

    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

    artwawA 1 Reply Last reply
    0
    • E Etro

      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

      artwawA Offline
      artwawA Offline
      artwaw
      wrote on last edited by
      #2

      @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ą.

      For more information please re-read.

      Kind Regards,
      Artur

      1 Reply Last reply
      0
      • E Offline
        E Offline
        Etro
        wrote on last edited by
        #3

        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ć ?

        artwawA 1 Reply Last reply
        0
        • E Etro

          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ć ?

          artwawA Offline
          artwawA Offline
          artwaw
          wrote on last edited by
          #4

          @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).

          For more information please re-read.

          Kind Regards,
          Artur

          1 Reply Last reply
          0
          • E Offline
            E Offline
            Etro
            wrote on last edited by
            #5

            @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);
            
                         }
            
            artwawA 1 Reply Last reply
            0
            • E Etro

              @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);
              
                           }
              
              artwawA Offline
              artwawA Offline
              artwaw
              wrote on last edited by
              #6

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

              For more information please re-read.

              Kind Regards,
              Artur

              1 Reply Last reply
              0

              • Login

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • Users
              • Groups
              • Search
              • Get Qt Extensions
              • Unsolved