Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. timer

timer

Scheduled Pinned Locked Moved Solved Spanish
9 Posts 2 Posters 1.5k Views
  • 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.
  • C Offline
    C Offline
    Casino
    wrote on last edited by
    #1

    tengo 2 timers uno en la funcion uno y el otro en dos, lo que sucede es que cuando uno(), hace lo suyo, no se inicia dos(), no se el motivo y ya no se por donde encararlo.Gracias.

    void MainWindow::on_play_clicked()
    {

    ui->tabla2->hide();
    
    nivel = 1;
    
    ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
    ui->anteg->setText(ui->tabla2->item(i,2)->text());
    ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
    ui->ante2->setText(ui->tabla2->item(i,2)->text());
    ui->blindtime->setText(ui->tabla2->item(i,3)->text());
    ui->level->setText(QString::number(nivel));
    
    uno();
    
    ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
    ui->anteg->setText(ui->tabla2->item(i,2)->text());
    ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
    ui->ante2->setText(ui->tabla2->item(i,2)->text());
    ui->blindtime->setText(ui->tabla2->item(i,3)->text());
    ui->level->setText(QString::number(nivel));
    
    dos();
    
    
    ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
    ui->anteg->setText(ui->tabla2->item(i,2)->text());
    ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
    ui->ante2->setText(ui->tabla2->item(i,2)->text());
    ui->blindtime->setText(ui->tabla2->item(i,3)->text());
    ui->level->setText(QString::number(nivel));
    
    C 1 Reply Last reply
    0
    • juankiJ Offline
      juankiJ Offline
      juanki
      Moderators
      wrote on last edited by
      #9

      Estupendo.

      También creo que puedes eliminar las llamadas a startTimer y killTimer, pues no las estás usando (al menos en el código que mostraste).

      Por favor, si el tema se solucionó, no te olvides de marcarlo como "solucionado".

      Un saludo

      Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
      Procura escribir correctamente y sin faltas de ortografía.

      Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

      1 Reply Last reply
      2
      • juankiJ Offline
        juankiJ Offline
        juanki
        Moderators
        wrote on last edited by juanki
        #2

        Hola

        ¿Qué es uno() y dos()? Supongo que funciones. No nos has mostrado como inicias los timers. ¿Se inician dentro de esas funciones? ¿Conectaste las señales "timeout" de los timers?

        Un saludo

        Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
        Procura escribir correctamente y sin faltas de ortografía.

        Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

        1 Reply Last reply
        0
        • C Casino

          tengo 2 timers uno en la funcion uno y el otro en dos, lo que sucede es que cuando uno(), hace lo suyo, no se inicia dos(), no se el motivo y ya no se por donde encararlo.Gracias.

          void MainWindow::on_play_clicked()
          {

          ui->tabla2->hide();
          
          nivel = 1;
          
          ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
          ui->anteg->setText(ui->tabla2->item(i,2)->text());
          ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
          ui->ante2->setText(ui->tabla2->item(i,2)->text());
          ui->blindtime->setText(ui->tabla2->item(i,3)->text());
          ui->level->setText(QString::number(nivel));
          
          uno();
          
          ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
          ui->anteg->setText(ui->tabla2->item(i,2)->text());
          ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
          ui->ante2->setText(ui->tabla2->item(i,2)->text());
          ui->blindtime->setText(ui->tabla2->item(i,3)->text());
          ui->level->setText(QString::number(nivel));
          
          dos();
          
          
          ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
          ui->anteg->setText(ui->tabla2->item(i,2)->text());
          ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
          ui->ante2->setText(ui->tabla2->item(i,2)->text());
          ui->blindtime->setText(ui->tabla2->item(i,3)->text());
          ui->level->setText(QString::number(nivel));
          
          C Offline
          C Offline
          Casino
          wrote on last edited by
          #3

          @Casino
          Si, uno y dos son dos funciones, en el mainwindow.h tengo:

          QTimer *cronometro;
          QTimer *crono;
          en el mainwindow.cpp:

          cronometro = new QTimer(this);
          QObject::connect(cronometro, SIGNAL(timeout()), this, SLOT(uno()));
          timerId = startTimer(60);

          crono = new QTimer(this);
          QObject::connect(crono, SIGNAL(timeout()), this, SLOT(dos()));
          timerId1 = startTimer(60);
          

          uno()
          {
          ui->seg->display(s);
          ui->min->display(m);
          ui->mtotal->display(mt);
          ui->p1->setText(QString::number(timerId));
          cronometro->start(1000);
          s++;
          if(s > 9){
          s = 0;
          m++;
          mt++;
          if(m == ui->tabla2->item(i,3)->text().toInt()){
          m = 0;
          cronometro->stop();
          killTimer(timerId);
          alarma->play();
          nivel++;
          i++;
          }
          dos()
          {
          ui->seg->display(s);
          ui->min->display(m);
          ui->mtotal->display(mt);
          ui->p2->setText(QString::number(timerId1));
          crono->start(1000);
          s++;
          if(s > 9){
          s = 0;
          m++;
          mt++;
          if(m == ui->tabla2->item(i+1,3)->text().toInt()){
          m = 0;
          crono->stop();
          killTimer(timerId1);
          alarma->play();
          nivel++;
          i++;
          }

          no paso de uno(), cuando esta funcion termina la otra NI, si le pongo un condicional menos.......

          1 Reply Last reply
          0
          • juankiJ Offline
            juankiJ Offline
            juanki
            Moderators
            wrote on last edited by
            #4

            Hola

            A ver si entendí, quieres que cuando pulses el botón "play" se inicie el temporizador 1, cuando este termine se llame al método "uno()". En éste método se inicia el temporizador 2, y cuando éste termine, se llame al método "dos()". No sé si estoy en lo cierto.

            Si es así, lo que tienes que hacer es en el constructor de mainwindows configuras los dos temporizadores:

            cronometro = new QTimer(this);
            QObject::connect(cronometro, SIGNAL(timeout()), this, SLOT(uno()));
            
            crono = new QTimer(this);
            QObject::connect(crono, SIGNAL(timeout()), this, SLOT(dos()));
            // si necesitas que solo se ejecute una vez..
            crono->setSingleShot(true);
            

            luego, en el método on_play_clicked() inicias el temporizador, pero no tienes que llamar diréctamente a uno(), ya lo hará la señal que henos conectado arriba:

            cronometro->start(1000); // 1 segundo
            

            Y en la función uno() inicias el segundo temporizador, que cuando termine llamará a la función dos()

            crono->start(1000);
            

            Si no los haces singleShot se estarán ejecutando continuamente. También puedes ponerle singleShot(true) y luego dentro de dos vuelves a llamar a

            cronometro->start(1000);
            

            para que vuelva a iniciarse la secuencia y repetir el proceso.

            Tu tienes hechas las conexiones y además dentro de on_play_clicked() también llamas a uno() y dos(), por lo que supondo que esas funciones se están ejecutando más veces de la cuenta.

            No necesitas llamar a startTimer() ni tampoco parar los timers, simplemente hazlos singleShot.

            No sé si es el comportamiento que buscas, es lo que entendí.

            Un saludo

            Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
            Procura escribir correctamente y sin faltas de ortografía.

            Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

            1 Reply Last reply
            0
            • C Offline
              C Offline
              Casino
              wrote on last edited by
              #5

              Para aclararte el panorama, ante todo gracias, lo que estoy queriendo hacer es lo siguiente:
              Viste los distintos softwares que hay para torneos de poker texas???, Bueno como quiero agregarles algo que no tienen me puse a hacer uno desde 0; como sabrás en el juego se inicia generalmente con ventanas de tiempo que duran de acuerdo al tipo de torneo, pero lo mas común seria 20,20,20,15,15,15,15,10,10,10 y así sucesivamente(por cierto son minutos), pero en todos esos tiempos necesitas que el timer vaya de 20 a 0, 20 a 0, 15 a 0, 10 a 0, etc. Eso me mato, creí que era la parte mas fácil y termine empantanado. Gracias por todo.

              1 Reply Last reply
              0
              • C Offline
                C Offline
                Casino
                wrote on last edited by
                #6

                Hola, acabo de hacer lo que me dijiste, pero el inicio de crono dentro de uno(), no surte efecto, te envio como quedo:

                void MainWindow::uno()
                {
                ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
                ui->anteg->setText(ui->tabla2->item(i,2)->text());
                ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
                ui->ante2->setText(ui->tabla2->item(i,2)->text());
                ui->blindtime->setText(ui->tabla2->item(i,3)->text());
                ui->level->setText(QString::number(nivel));

                ui->seg->display(s);
                ui->min->display(m);
                ui->mtotal->display(mt);
                ui->p1->setText(QString::number(timerId));
                s++;
                if(s > 9){
                    s = 0;
                    m++;
                    mt++;
                    if(m == ui->tabla2->item(i,3)->text().toInt()){
                        m = 0;
                        cronometro->stop();
                        killTimer(timerId);
                        alarma->play();
                        nivel++;
                        i++;
                        ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
                        ui->anteg->setText(ui->tabla2->item(i,2)->text());
                        ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
                        ui->ante2->setText(ui->tabla2->item(i,2)->text());
                        ui->blindtime->setText(ui->tabla2->item(i,3)->text());
                        ui->level->setText(QString::number(nivel));
                        crono->start();
                    }
                }
                

                }

                void MainWindow::dos()
                {

                ui->seg->display(s1);
                ui->min->display(m1);
                ui->mtotal->display(mt);
                ui->p2->setText(QString::number(timerId1));
                s++;
                if(s1 > 9){
                    s1 = 0;
                    m1++;
                    mt++;
                    if(m1 == ui->tabla2->item(i+1,3)->text().toInt()){
                        m1 = 0;
                        crono->stop();
                        killTimer(timerId1);
                        alarma->play();
                        nivel++;
                        i++;
                        ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
                        ui->anteg->setText(ui->tabla2->item(i,2)->text());
                        ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
                        ui->ante2->setText(ui->tabla2->item(i,2)->text());
                        ui->blindtime->setText(ui->tabla2->item(i,3)->text());
                        ui->level->setText(QString::number(nivel));
                
                    }
                }
                

                }

                void MainWindow::on_play_clicked()
                {

                ui->tabla2->hide();
                
                nivel = 1;
                
                cronometro->start(1000);
                

                }

                juankiJ 1 Reply Last reply
                0
                • C Casino

                  Hola, acabo de hacer lo que me dijiste, pero el inicio de crono dentro de uno(), no surte efecto, te envio como quedo:

                  void MainWindow::uno()
                  {
                  ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
                  ui->anteg->setText(ui->tabla2->item(i,2)->text());
                  ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
                  ui->ante2->setText(ui->tabla2->item(i,2)->text());
                  ui->blindtime->setText(ui->tabla2->item(i,3)->text());
                  ui->level->setText(QString::number(nivel));

                  ui->seg->display(s);
                  ui->min->display(m);
                  ui->mtotal->display(mt);
                  ui->p1->setText(QString::number(timerId));
                  s++;
                  if(s > 9){
                      s = 0;
                      m++;
                      mt++;
                      if(m == ui->tabla2->item(i,3)->text().toInt()){
                          m = 0;
                          cronometro->stop();
                          killTimer(timerId);
                          alarma->play();
                          nivel++;
                          i++;
                          ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
                          ui->anteg->setText(ui->tabla2->item(i,2)->text());
                          ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
                          ui->ante2->setText(ui->tabla2->item(i,2)->text());
                          ui->blindtime->setText(ui->tabla2->item(i,3)->text());
                          ui->level->setText(QString::number(nivel));
                          crono->start();
                      }
                  }
                  

                  }

                  void MainWindow::dos()
                  {

                  ui->seg->display(s1);
                  ui->min->display(m1);
                  ui->mtotal->display(mt);
                  ui->p2->setText(QString::number(timerId1));
                  s++;
                  if(s1 > 9){
                      s1 = 0;
                      m1++;
                      mt++;
                      if(m1 == ui->tabla2->item(i+1,3)->text().toInt()){
                          m1 = 0;
                          crono->stop();
                          killTimer(timerId1);
                          alarma->play();
                          nivel++;
                          i++;
                          ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text());
                          ui->anteg->setText(ui->tabla2->item(i,2)->text());
                          ui->blinds2->setText(ui->tabla2->item(i+1,0)->text()+"/"+ui->tabla2->item(i+1,1)->text());
                          ui->ante2->setText(ui->tabla2->item(i,2)->text());
                          ui->blindtime->setText(ui->tabla2->item(i,3)->text());
                          ui->level->setText(QString::number(nivel));
                  
                      }
                  }
                  

                  }

                  void MainWindow::on_play_clicked()
                  {

                  ui->tabla2->hide();
                  
                  nivel = 1;
                  
                  cronometro->start(1000);
                  

                  }

                  juankiJ Offline
                  juankiJ Offline
                  juanki
                  Moderators
                  wrote on last edited by
                  #7

                  Hola

                  Dentro de uno() llamas a start() sin pasarle la duración, no sé si será por eso.

                          crono->start();
                  

                  De todas formas, dices que no funciona, pero no nos explicas cómo debe funcionar y como está funcionado en realidad para que sepamos qué está fallando.

                  Un saludo

                  Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                  Procura escribir correctamente y sin faltas de ortografía.

                  Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                  1 Reply Last reply
                  0
                  • C Offline
                    C Offline
                    Casino
                    wrote on last edited by
                    #8

                    Orejas de burro para mi, me comí el crono->start(1000); Muchísimas Gracias.-

                    1 Reply Last reply
                    0
                    • juankiJ Offline
                      juankiJ Offline
                      juanki
                      Moderators
                      wrote on last edited by
                      #9

                      Estupendo.

                      También creo que puedes eliminar las llamadas a startTimer y killTimer, pues no las estás usando (al menos en el código que mostraste).

                      Por favor, si el tema se solucionó, no te olvides de marcarlo como "solucionado".

                      Un saludo

                      Intenta explicar el problema lo más claro y detallado posible. Adjunta los errores y el código que creas da el error.
                      Procura escribir correctamente y sin faltas de ortografía.

                      Si la duda se solucionó, por favor, marca el tema como 'solucionado'.

                      1 Reply Last reply
                      2

                      • Login

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