-
Hola, soy nuevo en esto, pero tengo una pregunta, tengo el timer listo y una alarma, el tema es que quiero realizar instrucciones usando el tiempo, es decir, pasan dos minutos y se hace esto luego pasan 10 minutos y se hace otra cosa. El tema es que activo el timer, llega a los dos minutos, hace lo que le pido y al instante vuelve para atras, es decir al comienzo, QUE PASA?'' Gracias por la respuesta...
-
Hola, soy nuevo en esto, pero tengo una pregunta, tengo el timer listo y una alarma, el tema es que quiero realizar instrucciones usando el tiempo, es decir, pasan dos minutos y se hace esto luego pasan 10 minutos y se hace otra cosa. El tema es que activo el timer, llega a los dos minutos, hace lo que le pido y al instante vuelve para atras, es decir al comienzo, QUE PASA?'' Gracias por la respuesta...
QUE PASA?
Pasa lo que tiene que pasar...
Cuando QTimer llega a cero empieza de nuevo. Pensalo como un reloj de arena: cuando termina lo das vuelta y empieza otra vez.Una opción para tu caso es que cuando termina timer1 y haces la tarea de timer1, arranques timer2. Cuando timer2 termina y haces las tareas de timer2 arranques timer1 y así se arma la rueda...
-
no hay manera de acomodar los dos timers, si alguien tiene algo del codigo se los agradezco.Gracias
@Casino intentaste con 2 objetos QTimer?
podrías mostrar tu código hasta el momento? -
@Casino intentaste con 2 objetos QTimer?
podrías mostrar tu código hasta el momento?@Pablo-J-Rogina
void MainWindow::on_play_clicked()
{int i = 0; int nivel = 1; QMediaPlayer *alarma = new QMediaPlayer; alarma->setMedia(QUrl::fromLocalFile("C:/Users/HP/Downloads/uno.mp3")); alarma->setVolume(30); ui->tabla2->hide(); ui->seg->display(s); ui->min->display(m); ui->mtotal->display(mt); ui->htotal->display(ht); timer->start(1000); s++; s = s % 10;//hago de cuenta que el minuto dura 10 segundos, para ir mas rapido, si funciona lo pongo bien. if(s == 0){ mt++;//minutos totales m++;// } ui->players->setText(QString::number(ui->tabla2->rowCount())); ui->level->setText(QString::number(nivel)); ui->blindg->setText(ui->tabla2->item(i,0)->text()+"/"+ui->tabla2->item(i,1)->text()); ui->blinds2->setText(ui->tabla2->item((i+1),0)->text()+"/"+ui->tabla2->item((i+1),1)->text()); ui->anteg->setText(ui->tabla2->item(i,2)->text()); ui->ante2->setText(ui->tabla2->item(i+1,2)->text()); ui->blindtime->setText(ui->tabla2->item(i,3)->text()); if(mt == ui->tabla2->item(0,3)->text().toInt()){ //timer->stop(); killTimer(3); alarma->play(); m = 0; nivel++; ui->level->setText(QString::number(nivel)); ui->blindg->setText(ui->tabla2->item(1,0)->text()+"/"+ui->tabla2->item(1,1)->text()); ui->blinds2->setText(ui->tabla2->item(2,0)->text()+"/"+ui->tabla2->item(2,1)->text()); ui->anteg->setText(ui->tabla2->item(2,2)->text()); ui->ante2->setText(ui->tabla2->item(2,2)->text()); ui->blindtime->setText(ui->tabla2->item(1,3)->text()); }}
mensaje de la aplicacion:
QObject::killTimer(): Error: timer id 3 is not valid for object 0x8dfdf4 (MainWindow, MainWindow), timer has not been killed -
Hola
Ahí te está dando un error la función killTimer, por que no la usas bien, aquí tienes la documentación:
https://doc.qt.io/qt-5/qobject.html#killTimer
Tienes que pasarle un identificador que te haya devuelto la función startTime, no un int.
La documentación de startTime:
https://doc.qt.io/qt-5/qobject.html#startTimer¿La llamada a timer->stop() que tienes comentada no te funciona? ¿No detiene el temporizador?
La verdad que aun no entendí muy bien lo que quieres hacer, y no me queda claro viendo el código.
Un saludo
-
Hola
Después de contestar otra consulta me he dado cuenta de que quizás lo que te ocurre es que el QTimer se sigue ejecutando y contando el tiempo indefinidamente y tú lo que quieres es que únicamente haga una única cuenta, un único "disparo".
Para eso tiene la propiedad singleShot.
No sé si es lo que buscabas.
Un saludo
Qt 6.11 is out! See what's new in the release
blog