Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.3.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

appeler une methode plusieurs fois

12 May modifié dans Qt / Langage C++
Bonjour ,
j'ai une méthode dans mon programme qui gère la marche et l’arrêt de mon chrono , je vous explique , quand mon mon lcdnumber et supérieur ou égal 5
j'envoie un signal qui déclenche le chrono et quand mon lcdnumber = 0 j'envoie un signal qui met en pause mon chrono et ça j’ai besoin de le faire a chaque fois , alors quand je met une boucle il envoie le signal plusieurs fois et fait beugué programme

void control::startrace()
{

if (ui->lcdNumber->intValue() >= 5 && ui->lcdNumber->intValue() <=8 )
{
qDebug() << "start";

emit Start();


}
else if(ui->lcdNumber->intValue() == 1 )

{

emit Pause();
qDebug() << "pause";
}
}
et merci de votre aide :)

Réponses

  • Salut,
    peux-tu montrer les connexions ainsi que le code des slots appelés par celles-ci
  • voici les connexion

    connect(&stopwatchM, SIGNAL(currentTime(QString,QString,QString)), this, SLOT(updateDisplay(QString,QString,QString)));
    connect(this, SIGNAL(Start()), &stopwatchM, SLOT(start()));
    connect(this, SIGNAL(Pause()), &stopwatchM, SLOT(pause()));
    connect(this, SIGNAL(Restart()), &stopwatchM, SLOT(restart()));
    connect(this, SIGNAL(Reset()), &stopwatchM, SLOT(reset()));

    la classe ou se trouve mes slots

    #include "stopwatchmodel.h"

    StopwatchModel::StopwatchModel(QObject *parent) : QObject(parent)
    {
    timer = new QTimer(this);
    connect(timer, SIGNAL(timeout()), this, SLOT(updateDis()));
    elapsedTime = 0;
    }

    void StopwatchModel::start()
    {
    timer->start(10);
    clock.start();
    }

    void StopwatchModel::restart()
    {
    timer->start(10);
    clock.restart();
    }

    void StopwatchModel::pause()
    {
    elapsedTime = elapsedTime + clock.restart();
    timer->stop();
    }

    void StopwatchModel::reset()
    {
    elapsedTime = 0;
    clock.restart();
    emit currentTime("00","00","00");
    timer->stop();
    }

    void StopwatchModel::updateDis()
    {
    int time = clock.elapsed() + elapsedTime;
    int min = (time / 60000) % 60;
    int sec = (time / 1000) % 60;
    int hun = (time / 10) % 100;
    QString m,s,h;

    // When the times are less than 10 make sure there it is displayed as 2 digits
    if(min < 10)
    {
    m = "0"+QString::number(min);
    }
    else
    {
    m = QString::number(min);
    }

    if(sec < 10)
    {
    s = "0"+QString::number(sec);
    }
    else
    {
    s = QString::number(sec);
    }

    if(hun < 10)
    {
    h = "0"+QString::number(hun);
    }
    else
    {
    h = QString::number(hun);
    }

    emit currentTime(m,s,h);
    }

    mon chrono marche correctement le problème c'est mes signals que je dois envoyer a chaque fois que la condition est vérifier
  • Je n'ai pas vu de lien entre ton dernier post et la méthode void control::startrace()
  • 12 May modifié
    quand la condition de ma méthode void control::startrace() et vérifier elle émet un signal Start() au slot de la classe StopwatchModel

    void StopwatchModel::start()
    pour demarrer le chrono
    et la mème chose pour pause
  • j'ai bien vu, mais qui appelle starttrace() ?
  • ce que j’essaye de faire c'est des que la condition est vérifier , il m’envoie le signal approprier
  • je l'appelle dans le main
  • Discussion déplacée au bon endroit ! Veille à bien sélectionner le bon forum avant de démarrer une discussion pour les prochaines fois, merci. ;)
Connectez-vous ou Inscrivez-vous pour répondre.