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 :

Projet Horloge

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut Projet Horloge
    Salut tous le monde ...!
    svp je suis un débutant en matière d'utilisation de la bibliothèque Qt ... cependant, je suis en train de travailler sur un projet de création d'horloge..
    le truc consiste à créer une petite application capable de capturer l'heure du système et après prendre le relais pour l'incrémentation des secondes (les minutes, les heures .... en conséquence). J'ai créé l'algo de l'incrémentation et je l'ai testé sous console, il marche super bien... Maintenant je suis passé à créer une interface graphique avec Qt 4.4

    Bon mon idée c'est d'afficher tout simplement un QString comportant l'heure (HH::MM::SS) sous forme de chaine de caractères via un QLabel avec le setText(QString &text). La chaine de caractere, quant à elle, est préparée par une aure classe (la même que j'ai utilisé avec la console, donc elle marche).

    Je fais la capture de l'heure du système, je l'affiche via ce QLabel, puis je change le contenu du texte affiché par ce QLabel au bout de chaque seconde, pour ceci j'utilise un slot que j'ai créé et le signal avec la fixation de l'intervalle à 1s.

    Pour etre plus concret, voilà des bouts de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Réglage et lancement du signal timer
       timer = new QTimer(this);
        timer->setInterval(1000); // équivalent à un intervalle d'une seconde
        timer->start();
     
        QObject::connect(timer, SIGNAL(timeout()), this, SLOT(Tic()));
    ..... (ce code fait partie du constructeur de la fenetre que je lance et qui hérite de QWidget)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void Horloge::Tic()//La définition du slot
    {
        Evolue();
        QString str = Affiche(Annee,Mois,jour,Heures,Minutes,Secondes);
        tempsAffich->setText(str);
    }
    //tempsAffiche est le QLabel, Affiche est la méthode qui prépare le QString de l'heure à chaque fois après incrémentation
    // Evolue() est la méthode qui incrémente.

    Après tous ceci, je compile sans aucune erreurs affichées, mais au moment du lancement du .exe j'ai la grande surprise d'avoir l'erreur suivante (sous forme de message d'erreur windows :

    " This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information "

    Je clique sur Ok, et l'application ne se lance pas... je suis sous windows vista version Ultimate. et j'utilise code::blocks comme IDE.
    SVP aidez moi (je m'excuse si mon message est peinible à lire de par sa longueur, mais le problème est assez complexe je crois)

    Merci

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut et bienvenue sur le forum
    , tu as surement un pointeur non initialisé
    Vérifie tempsAffich

    Sino, il faudrait que tu montre un peu plus de code ou utilise un debugeur

    ps : pense à utiliser les balises (ou la touche #) pour le code

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Ok je vai vous passer un peu de plus de code pour voir.

    Pour les attributs comme tempsAffich, je vous dis tout de suite comment je fait pour la déclaration, voici mon fichier horloge.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
    class Horloge : public QWidget
    {
        public:
        Horloge(); // Le constructeur graphique, c'est le conteneur de tous
        void fixe_heure();
        void RAZ();
        void Lire_heure();
        void Evolue();
     
        //private:
        QLabel *tempsAffich; // va recevoir le slot
        QTimer *timer; // va lancer le signal
        Compteur Annee,Mois,jour,Heures,Minutes,Secondes;
     
        public slots:
        void Tic();
     
    };
    puis pour la premiere utilisation de tempsAffich c'est celle-là présente sur le fichier horloge.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
    Horloge::Horloge() : QWidget()
    {
        //La taille de la fenetre
        setFixedSize(200,100);
     
        //L'insertion de la chaine de caractere.
        tempsAffich = new QLabel::QLabel("",this);
        tempsAffich->move(30,20);
     
        //Réglage et lancement du signal timer
        timer = new QTimer(this);
        timer->setInterval(100000000); // équivalent à un intervalle d'une seconde
        timer->start();
     
        QObject::connect(timer, SIGNAL(timeout()), this, SLOT(Tic()));
    }
    Il y a également le fait que j'ai utilisé deux classes amies. La classe horloge déclare des objets de la classe Compteur comme attributs (je vous dis ceci, par ce que j'ai un doute que l'erreur peut venir de là aussi).

    Merci bcp

  4. #4
    Membre régulier
    Inscrit en
    Novembre 2008
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Novembre 2008
    Messages : 9
    Par défaut
    Est ce qu'il y a une erreur d'initialisation ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 248
    Par défaut
    je ne vois pas de Q_OBJECT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class Horloge : public QWidget
    {
      Q_OBJECT
        public:
    Franchement j'en ai aucune idée si c'est nécessaire

  6. #6
    Membre expérimenté Avatar de MacPro
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    367
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2007
    Messages : 367
    Par défaut
    Salut, j'ai lu rapidement ton problème, je ne ferais pas comme ça...mais bon, ce n'est que mon avis.

    Dans ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //L'insertion de la chaine de caractere.
        tempsAffich = new QLabel::QLabel("",this);
    Pourquoi tu initialises tempsAffich comme ça ?
    pourquoi pas comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tempsAffich = new QLabel("", this);

    Y'a un composant Qt qui fait ça tout seul : QTimeEdit

    documentation de QTimeEdit

    Ensuite, tu peux utiliser sa méthode text().

    Tu n'es pas obligé de l'afficher sur ta fiche.
    Tu peux aussi avoir un timer inférieur à la seconde (voire 1/4 de seconde) qui se contente de mettre à jour ce QTimeEdit et par conséquent mettre à jour ton label :

    Quelque chose dans ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void maClasse::slotUpdateCurrentTime()
    {
    // Ce slot est relié au signal d'un TimeOut
    	currentTime->setTime(QTime::currentTime()); // Mettre à jour le QTimeEdit
    	ui.lblHeure->setText(currentTime->text());   // Mettre à jour le label
    }
    Y'a même encore plus simple, le QTime possède une méthode toString :

    documentation de QTime::toString(...)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Qu'est ce qu'un grand projet ?
    Par Geronimo dans le forum Débats sur le développement - Le Best Of
    Réponses: 62
    Dernier message: 04/04/2013, 14h52
  2. [Delphi] Association composants-projet
    Par Pierre Castelain dans le forum Composants VCL
    Réponses: 6
    Dernier message: 31/07/2002, 16h20
  3. Parametrage des options de projet
    Par ares7 dans le forum EDI
    Réponses: 7
    Dernier message: 22/07/2002, 15h33
  4. Réponses: 6
    Dernier message: 21/06/2002, 14h48
  5. Les fichiers d'un projet
    Par Manolo dans le forum C++Builder
    Réponses: 4
    Dernier message: 07/05/2002, 17h51

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