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

Qt Discussion :

Un programme tout simple


Sujet :

Qt

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut Un programme tout simple
    Bonjour à tous !

    Je programme sous Qt designer.
    J'essai de comprendre pourquoi ma fenêtre ne se rafraîchit pas au bon moment.
    Mon programme est censé, lorsque j'appuis sur le button, écrire 5 fois "Boo ! " dans un textEdit à intervale d'une seconde. Or, le programme bloque 5 secondes puis écrit tous les "boo ! " à la fin.

    Savez vous où je fais mon erreur ?



    En faite, ce que je cherche à comprendre, c'est pourquoi mon text ne s'affiche qu'a la fin de la boucle et pas au moment de l'instruction (même sans le sleep). Le sleep n'est la que pour rendre la chose visible en printant le text moins rapidement.

    En effet, je travail sur un programme qui affiche une vidéo à partir de plusieurs images ".ppm". Je fais donc une boucle sur un pixmapLabel->setPixmap( QPixmap( "monimage.ppm" ) ).
    Comme pour le textEdit, les pixmap ne s'affichent pas au moment de l'instruction mais à la fin de la boucle.

    Je vous remercie de votre aide.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2007
    Messages : 53
    Points : 37
    Points
    37
    Par défaut
    es-tu sûr que le repaint() soit nécessaire?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Et bien avec le repaint ou sans cela ne marche pas...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Je pense que je vais m'orienter vers le lancement d'un autre thread.

    J'ai essayé une manip en lançant un QThread qui écrit 5 fois "Boo!" dans le textEdit, à une seconde d'intervalle : Cela marche nickel.
    J'ai mis mon mythread.start() dans le main et ainsi, le thread se lance au début du programme.

    En revanche, pour lancer le thread en appuyant sur le pushButton, c'est une autre affaire...
    J'essaye d'envoyer un signal à mon QThread pour lancer le slot mythread.exec() qui lance la méthode mythread.start(), mais sans succès. Le compilateur n'aime pas l'idée d'envoyer un signal à un objet qui n'est pas un QObject.

    Vous avez une idée pour lancer le thread en appuyant sur le bouton ?

  5. #5
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    Je pense qu'il faudrait appeler QCoreApplication::processEvents(), sinon les événements qui redessinent la fenêtre se sont pas réalisés tant que tu es dans ta fonction.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Je suis sous Qt3. QCoreApplication n'existe pas.

  7. #7
    Membre confirmé

    Inscrit en
    Octobre 2007
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 234
    Points : 644
    Points
    644
    Par défaut
    Alors c'est QApplication::processEvents().

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    j'obtiens une erreur de compilation :

    cannot call member fonction 'void QApplication::processEvents()' without object.

    Sais-tu d'où cela provient ?

  9. #9
    Membre habitué

    Profil pro
    Développeur informatique
    Inscrit en
    Mars 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2008
    Messages : 51
    Points : 178
    Points
    178
    Par défaut
    As-tu essayer d'utiliser un QTimer avec le système de signals/slots ? Ca t'évitera de devoir gérer les threads.
    Pourquoi ne pas faire un slot qui se contente de lancer le thread ?

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    Oki, je vais essayer de faire un slot qui lance un thread.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 57
    Points : 34
    Points
    34
    Par défaut
    C'est good !

    Je suis passé sur Qt4, le QApplication::processEvents() et le QCoreApplication::processEvents() fonctionnent.

    Je vous remercie.

Discussions similaires

  1. Recherche code pour un programme tout simple
    Par Pierreas dans le forum Visual C++
    Réponses: 0
    Dernier message: 20/12/2010, 16h22
  2. Programme tout simple mais sans fenetre
    Par pip1000 dans le forum Débuter
    Réponses: 6
    Dernier message: 10/02/2009, 20h02
  3. Réponses: 2
    Dernier message: 06/01/2008, 00h13
  4. Programme Perl tout simple qui ne fonctionne pas
    Par jejerome dans le forum Langage
    Réponses: 4
    Dernier message: 26/02/2006, 23h58
  5. [langage] Problème tout simple
    Par marouanitos dans le forum Langage
    Réponses: 5
    Dernier message: 24/09/2003, 11h25

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