-
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 ?
http://nsa06.casimages.com/img/2009/...0190893263.jpg
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.
-
es-tu sûr que le repaint() soit nécessaire?
-
Et bien avec le repaint ou sans cela ne marche pas...
-
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 ?
-
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.
-
Je suis sous Qt3. QCoreApplication n'existe pas.
-
Alors c'est QApplication::processEvents().
-
j'obtiens une erreur de compilation :
cannot call member fonction 'void QApplication::processEvents()' without object.
Sais-tu d'où cela provient ?
-
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 ?
-
Oki, je vais essayer de faire un slot qui lance un thread.
-
C'est good !
Je suis passé sur Qt4, le QApplication::processEvents() et le QCoreApplication::processEvents() fonctionnent.
Je vous remercie.