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