IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Créer un compteur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Créer un compteur
    Bonjour les gens,

    Je suis débutant sous Qt, j'ai commencé cette semaine.
    Pour m'entrainer, j'ai voulu créer un minuteur, qui au bout de 10 secondes, affiche un message, comme quoi le temps est écoulé.
    Pas de problème jusque là.
    Je me suis dit que ça serait plus pratique de pouvoir changer le temps
    ...
    Et donc, je fais mon petit slot, tout ça, mais quand je compile, une fenêtre windows s'affiche en disant le message "le programme a cessé de fonctionner".
    J'ai mis en commentaire des lignes, pour chercher se qui me faisait cet effet,
    j'ai tenté en mode débogage, puis j'en suis arrivé là:

    compteur.cpp:

    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    #include "compteur.h"
     
    CptWs::CptWs() : QWidget()
    {
        setFixedSize(210, 110);
     
        m_timemn = 10;  // C'est à cause de cette variable
     
        m_boutonDemarrer = new QPushButton("Démarrer le compteur", this);
        m_boutonDemarrer->move(40, 25);
     
        m_timer = new QTimer(this)
        m_timer->setSingleShot(true);
        m_timer->setInterval(m_timemn * 1000); // ici, quand je met 10000 au lieu de "m_timemn * 1000", pas de problèmes
     
        QObject::connect(m_boutonDemarrer, SIGNAL(clicked()), m_timer, SLOT(start()));
        QObject::connect(m_boutonDemarrer, SIGNAL(clicked()), this, SLOT(desactiveBouton()));
        QObject::connect(m_timer, SIGNAL(timeout()), this, SLOT(msgTpsTermine()));
        QObject::connect(m_timer, SIGNAL(timeout()), this, SLOT(activeBouton()));
    }
     
    void CptWs::msgTpsTermine()
    {
        QMessageBox::warning(this, "Temps écoulé", "Le temps de 10 mn s'est écoulé !");
    }
     
    void CptWs::desactiveBouton()
    {
        m_boutonDemarrer->setEnabled(false);
    }
     
    void CptWs::activeBouton()
    {
        m_boutonDemarrer->setEnabled(true);
    }
    compteur.h:
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    #ifndef COMPTEUR_H
        #define COMPTEUR_H
     
    #include <QApplication>
    #include <QWidget>
    #include <QPushButton>
    #include <QMessageBox>
    #include <QInputDialog>
    #include <QTimer>
     
    class CptWs : public QWidget
    {
        Q_OBJECT
     
        public:
     
            CptWs();
     
        public slots:
     
            void msgTpsTermine();
     
            void desactiveBouton();
            void activeBouton();
     
        private:
     
            int m_timemn; // Bug à cause de celle-ci
            QPushButton *m_boutonDemarrer;
            QTimer *m_timer;
     
    };
    #endif // COMPTEUR_H
    Quand je n'utilise pas la variable "m_timemn", je n'ai pas de problèmes.
    Quand je l'utilise, deux cas:
    - Quand je ne modifie rien, l'OS ferme mon programme avec le message que j'ai signalé plus haut
    - En mode 'Debug', il m'arrête devant " QMessageBox::warning(this, "...", "..."); " et me mettant ce message :

    Nom : 349996.png
Affichages : 739
Taille : 24,7 Ko

    Ce serait donc le couple QMessageBox::warning / int m_timemn qui me ferait boguer, car si je met en commentaire la ligne 25 de mon .cpp, pas de message (normal) et pas de problème...

    Bref, je suis bloqué.
    Je remercie d'avance tous ceux qui m'aideront.

  2. #2
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonsoir.
    Je ne vois pas d'erreur dans le code posté.
    Le problème vient peut-être d'ailleurs.

    Ceci dit, personnellement j'aurais laissé la possibilité de passer un objet « parent » au constructeur, et je n'aurais pas spécifié explicitement le scope de la fonction statique « connect ».

    À part ça, tu as essayé le forum Qt ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Je reprécise que je suis débutant, je ne comprends pas très bien ce que tu veux dire concrètement.
    Et pour l'emplacement du topique, je m'en excuse, je viens de m'inscrire, je ne connaît donc pas encore très bien ce site.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Points : 421
    Points
    421
    Par défaut
    Salut loukiluk,

    Je viens de tester ton code et il fonctionne sans problème. Comme l'as dit Steph_ng8, le problème vient sûrement d'ailleurs. Dsl je sais que cela ne t'aide pas beaucoup .

    Peut être est-ce un problème lié à l'installation du SDK de Qt ? as-tu déjà utilisé d'autre projets ? rencontres-tu le même genre de problème ?

    Sinon essaye peut être une réinstallation ou mise à jour de ton installation de Qt

    Le code que tu as posté est-il bien le code que tu utilise ?

    Je te pose la question ca j'ai vu une petite faute dans le code que tu as posté et je me demande si tu l'as modifié avant de le posté. Il manque un ";" à la ligne 13 du cpp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        m_timer = new QTimer(this)
    Concernant les remarques de Steph_ng8 :

    Les constructeurs des classes descendante de QObject ont un paramètre "parent" qui permet de passer l'objet parent lors de la construction, l'avantage avec cette pratique est que l'objet sera détruit automatiquement par sont parent lors de la fermeture du programme. C'est donc un bonne pratique que de laisser ce paramètre dans le constructeur. Plus d'info ici en francais et ici (en anglais)
    Dans ton cas cela donnera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //.h
    CptWs::CptWs(QWidget *parent = 0) ;
    //.cpp
    CptWs::CptWs(QWidget *parent) : QWidget(parent)
    {
    ...
    }

    Ensuite lors de l'appel de connect, il n'est pas nécessaire de préciser le scope QObject, car tu est déjà dans une classe qui hérite de QObject. Mais je ne crois pas que cela change quelque chose, mais peut être que je me trompe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    connect(m_boutonDemarrer, SIGNAL(clicked()), m_timer, SLOT(start()));
        connect(m_boutonDemarrer, SIGNAL(clicked()), this, SLOT(desactiveBouton()));
    //etc ...
    Désolé de ne pas t'apporter de solution, j'éspère néanmoins que mes réponses t'auront un peu aidé.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Hum, excusez-moi d'avoir répondu très tard.

    J'utilise pas mal de projets avec Qt Creator, vu que je suis en plein dans l'apprentissage de Qt, et je n'ai jamais eu ce problème ailleurs qu'ici.

    "Le code que tu as posté est-il bien le code que tu utilise ?"
    Maintenant, non. Au moment où j'ai posté, oui.
    Mais j'utilise maintenant un autre moyen, et ça fonctionne sans problème.
    Je vais éditer pour mettre du code.

    Tes remarques m'auraient été utiles, si j'étais revenu plus tôt
    Pour le connect, j'ai appris entre temps que je n'ai pas besoin de mettre QObject:: devant, pareil pour 'QWidget(parent)'.
    Par contre, je ne peux plus éditer mon premier poste pour ajouter le point-virgule.


    EDIT :

    J'ai avancé avec Qt, je suis passé par ZeroClassGenerator (du sdz), j'en suis à la QMainWindow (après le tuto du sdz, je passerais chez vous ), et mon alarme commence sa 4e version.
    La dernière version fonctionnelle est la 3.3, et à partir de la 3.1, j'utilise Qt Designer.
    Etant donné qu'il n'y a jamais eu quelqu'un derrière mon code pour l'améliorer et dire ce qui ne vas pas, je vais indiquer un lien sur un .rar de tout le projet (sous windows, par contre), et je souhaiterais que l'on me fasse le plus de commentaires et de remarques possible.
    Voilà le .rar : http://www.mediafire.com/?81cpibih83kk03d
    Aperçu : http://www.mediafire.com/i/?9pwz8hjv29e2csq

    Merci d'avance pour tout les participants

    PS : je m'attends à ce qu'on me dise que le bouton "Fermer" ne sert à rien, mais je m'en fous, c'est joli ><

Discussions similaires

  1. [Tableaux] Créer un compteur de visites
    Par dolf13 dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2007, 15h51
  2. comment créer un compteur d'intervention ?
    Par Bouom771 dans le forum Access
    Réponses: 5
    Dernier message: 28/01/2007, 18h53
  3. [T-SQL] Créer un compteur (clé) dans un select
    Par Mathusalem dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2007, 09h23
  4. [XSL] Debutant : créer un compteur.
    Par castaka dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 21/04/2005, 15h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo