Problème de repaint() sur un QLabel [QT] - C++ - Programmation
Marsh Posté le 10-05-2005 à 15:59:25
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.
Marsh Posté le 05-06-2005 à 12:46:09
You can force main thread to manage repaint event with call "ProcessEvents" of QApplication.
void QApplication::processEvents()
Thats all ;-)
Alex
harrysauce a écrit : Bonjour,
|
Marsh Posté le 05-06-2005 à 18:57:38
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.
Marsh Posté le 14-06-2005 à 12:55:01
Ouaip, je sais, c'est ce que j'avais fini par faire
Merci
Marsh Posté le 14-06-2005 à 21:29:13
nathan_g a écrit : Tu ne peux pas utiliser plutot un QWaitCondition ? |
Où est le rapport ?! Il n'a pas parlé de thread ici...
Marsh Posté le 10-05-2005 à 12:53:20
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 :
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