Bonsoir,

Je me tracasse pas mal avec mon soft ce soir. Je suis déjà sur une petite piste, je vais vous expliqué ensuite.

Voyons ce que j'ai déjà fait avec quelques explications.

Pour commencer, je part du principe que j''appuie sur un bouton. Que le paramètre de base est sur 60 secondes (soit 1 minute). Plus le décompte se fait, moins grande sera la progressBar... Et lorsque le timer est fini, un bip et un arrêt des décomptes.

Il faudra géré des cas particulier tel que la pause, l'arrêt. Et un mode spécial... Mais celui-ci est très particulier, il ne sera traîter qu'en dernier. Et seulement si c'est faisable. Pour ce soir, on en a pas besoin, il est volontairement mis de côté.

Donc j'ai une écoute de signal qui déclenche quand j'appuie sur le bouton start.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
/* Ici lorsque on lance le timer */
void MainWindow::on_pushButton_clicked()
{
    //Initialise les variables
    int timerConsigne = 0;
 
    //Charge la consigne
    timerConsigne = ui->spinBoxTimerSec->value();
 
    //Décompte chaque secondes
    for(int i = timerConsigne; i < 0; i--) {
        //Faire attendre
        //sleep();
 
        //Gérer l'affichage sur la progress bar
        //100% = consigne max, 0% = 0 timer
    }
}
Pour info, ce qui est en commentaire sera à étudier plus tard

Donc, je suis parti avec l'idée d'une boucle fort qui fait attendre. Sauf que je trouve que c'est pas très propre... Alors, sur les conseils du t'chat j'ai googoler un peu et; je me suis rendu compte qu'il existait au sein de Qt des timers. Notamment 1 qui semble être liée à mon cas. http://qt-project.org/doc/qt-4.8/timers.html

Il y a aussi ce lien interne à :dvp: qui traite une partie du sujet et qui ma été enseigné par Autenur sur le t'chat : http://qt.developpez.com/faq/?page=modules-qtcore-temps

Il me reste à mettre en ouvre cela.

Je suis dans la supposition qu'il faille d'abord le déclarer dans le .h. Je ne suis pas doué hein... J'ai pas l'habitude en autodidacte de me lancer sans confirmation. Alors je vous demande de l'aide la dessus.

De la même façon, il me faut virer la boucle for et, une fois de plus, intégré le bout de code qui va décompter. Si j'ai bien compris, c'est en millisecondes. Et moi, je traîte des secondes... Il me faut donc effectuer une conversion de temps. Mais comment ?

Ensuite, il faut que je sorte le terme pour afficher le décompte dans la progressBar. Et là, j'ai pour idée de dire que si on est à 100% de la barre, c'est qu'il reste 60s dans mon exemple. Si j'approche de 0, c'est qu'il reste pas de temps. Et voyez-vous cela m'aurais permis aussi de déclenché en chaîne au travers d'un simple if (timeEncours <= 0) { //Sonerie + remise à 0 du compteur }

Un truc dans cet esprit.

C'est là que je demande surtout un coup de main pour comprendre comment dans mon écouteur je peux faire ça proprement sans que ça ne soit la cacophonie. Bref, être sûr de son coup.

Ne me brimez pas par mon ignorance, je me répête mais je suis autodidacte. Donc, j'apprends !

Merci beaucoup pour votre aide.

Edit 1 :

Avec le nouveau lien, j'ai compris que l'on pouvais lancer le timer avec start() et l'arrêter avec stop(). Mais je suppose qu'il faut avant tout l'initialiser correctement.

Edit 2 :

Merci à WinJérome qui ma donner cette piste sur la conversion.
start(*variable) ou variable est un int contenant le nombre de seconde

Ici, on fais une multiplication car c'est un int. Bon, je note au fur et à la mesure pour pas re poser la question plus tard. Et se rendre compte de la compatibilité...

Edit 3 :

Finalement, j'ai un bout de la réponse...

J'ai coder ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
/* Ici lorsque on lance le timer */
void MainWindow::on_pushButton_clicked()
{
 
    /*
     *  Initialise les variables
     *  Charge la consigne
     *  Opère une conversion Secondes -> Millisecondes par multiplication
     **/
    int timerConsigneMs = ui->spinBoxTimerSec->value() * 1000;
 
    //Initialise le timer avec un pointeur pour éviter sa destruction
    QTimer *pTimer = new QTimer;
 
    //Lance le timer
    pTimer->start(timerConsigneMs);
}
C'est bon, le timer devrais se lancer.

Il faut maintenant que je traîte le décompte. Pour chaque seconde, on a le progressBar qui diminue. Voila, c'est maintenant ma demande. Gérer le progressBar en fonction de l'état du timer.

Merci pour votre aide.