Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
479 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [QT]Problème de repaint() sur un QLabel

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[QT]Problème de repaint() sur un QLabel

n°1077671
harrysauce
Miaaaooou!
Posté le 10-05-2005 à 12:53:20  profilanswer
 

Bonjour,
 
Je bosse sur un projet en QT (j'utilise KDevelop sous Fedora 3), et à un endroit j'ai besoin d'afficher un QLabel, faire un sleep, puis modifier ce QLabel.
 
Ca donne quelque chose du genre :

Code :
  1. [...]
  2. QLabel * lbl;
  3. lbl = new Label("blablabla", this);
  4. [...]
  5. lbl->setText("Test 1" );
  6. sleep(1); //Temporisation d'une seconde
  7. lbl->setText("Test 2" );
  8. [...]


 
Donc en théorie, ça devrait m'afficher "Test 1", attendre une seconde, puis remplacer "Test 1" par "Test 2".
 
Le truc c'est que ça marche pas des masses, mon programme s'éxécute correctement, puis arrivé au niveau du sleep, il temporise, mais n'affiche pas "Test 1", puis une fois la tempo terminée, il affiche "Test 2"
 
(En gros, je devrais avoir "Test 1", tempo d'1 seconde, "Test 2", et j'ai tempo d'1 seconde, "Test 2" ).
 
En fait je pense que ça ne raffraichit la fenêtre qu'une fois sorti de la fonction dans laquelle se trouve le code que j'ai mis au dessus.
J'ai donc essayé de forcer le rafraichissement en mettant un repaint, mais ça marche pas :/ (j'ai aussi essayé un update, pareil)
 
Si quelqu'un a une idée de comment faire, je suis preneur parce que ça fait plusieurs heures que je galère là dessus :/
 
Merci d'avance,
Harrysauce

mood
Publicité
Posté le 10-05-2005 à 12:53:20  profilanswer
 

n°1078005
IrmatDen
Posté le 10-05-2005 à 15:59:25  profilanswer
 

Salut,
Tu dois laisser les événements être traités par Qt. Quand tu fais ton sleep(), tu freeze totalement l'application. Avoir à disponibilité un slot qui s'occupe de changer l'affichage, afficher "Texte 1" dans ton label, créer un timer single-shot (avec sa méthode statique) d'une durée de 1 sec, et lui demander d'exécuter le slot prévu précédemment.

n°1108620
alex240275
Posté le 05-06-2005 à 12:46:09  profilanswer
 

You can force main thread to manage repaint event with call "ProcessEvents" of QApplication.
 
void QApplication::processEvents()
 
Thats all ;-)
 
Alex
 
 

harrysauce a écrit :

Bonjour,
 
Je bosse sur un projet en QT (j'utilise KDevelop sous Fedora 3), et à un endroit j'ai besoin d'afficher un QLabel, faire un sleep, puis modifier ce QLabel.
 
Ca donne quelque chose du genre :

Code :
  1. [...]
  2. QLabel * lbl;
  3. lbl = new Label("blablabla", this);
  4. [...]
  5. lbl->setText("Test 1" );
  6. sleep(1); //Temporisation d'une seconde
  7. lbl->setText("Test 2" );
  8. [...]


 
Donc en théorie, ça devrait m'afficher "Test 1", attendre une seconde, puis remplacer "Test 1" par "Test 2".
 
Le truc c'est que ça marche pas des masses, mon programme s'éxécute correctement, puis arrivé au niveau du sleep, il temporise, mais n'affiche pas "Test 1", puis une fois la tempo terminée, il affiche "Test 2"
 
(En gros, je devrais avoir "Test 1", tempo d'1 seconde, "Test 2", et j'ai tempo d'1 seconde, "Test 2" ).
 
En fait je pense que ça ne raffraichit la fenêtre qu'une fois sorti de la fonction dans laquelle se trouve le code que j'ai mis au dessus.
J'ai donc essayé de forcer le rafraichissement en mettant un repaint, mais ça marche pas :/ (j'ai aussi essayé un update, pareil)
 
Si quelqu'un a une idée de comment faire, je suis preneur parce que ça fait plusieurs heures que je galère là dessus :/
 
Merci d'avance,
Harrysauce


n°1108880
jefe
Posté le 05-06-2005 à 18:57:38  profilanswer
 

Utilise les sleep avec parcimonie. Et surtout jamais dans le GUI thread de QT !!! La methode que te suggere IrmatDen est la seule appropriee a ton probleme.


Message édité par jefe le 05-06-2005 à 18:58:10
n°1119407
harrysauce
Miaaaooou!
Posté le 14-06-2005 à 12:55:01  profilanswer
 

Ouaip, je sais, c'est ce que j'avais fini par faire :D
 
Merci :jap:

n°1119413
nathan_g
Posté le 14-06-2005 à 13:02:00  profilanswer
 

Tu ne peux pas utiliser plutot un QWaitCondition ?

n°1120052
IrmatDen
Posté le 14-06-2005 à 21:29:13  profilanswer
 

nathan_g a écrit :

Tu ne peux pas utiliser plutot un QWaitCondition ?


 [:shinji_kun64]  
Où est le rapport ?! Il n'a pas parlé de thread ici...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [QT]Problème de repaint() sur un QLabel

 

Sujets relatifs
Menu : problème de "scintillement".Problème php - mysql avec IIS
probleme lecture vidéoNEWBIE : Probleme de frame, header, target.
Problème avec mysql_fetch_array()Probleme de gestion des evenements claviers
Sybase php : Problème de connexion - et de get_last_messageun problème d'adressage! (enfin!peut etre )
problème de threadsproblème avec l'envoi de mail : caractères mangés
Plus de sujets relatifs à : [QT]Problème de repaint() sur un QLabel


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR