Je crée une application dans laquelle j'utilise une boucle dans un paintevent pour dessiner quatre rectangles.et je veux que chaque rectangle soit dessiné après 500ms.pour que je postule msleep() mais en l'utilisant quand j'exécute l'application, il raccroche pendant 2000ms puis dessine tous les rectangles en même temps. Quelqu'un peut-il me dire une solution à ce problème afin que chaque rectangle soit dessiné après un délai. Merci.Qt: comment utiliser sleep() avec paintEvent
Répondre
N'utilisez pas sleep/msleep
dans paintEvent()
. Vous souhaitez traiter vos événements rapidement et ne pas passer 2 secondes dans l'appel de fonction. Le thread ne peut pas traiter d'autres événements pendant qu'il exécute votre code de traitement d'événement.
Dans un cas simple, vous pouvez utiliser un QTimer
pour recevoir des signaux quatre fois toutes les 500 ms. Dans l'emplacement de traitement, mettez à jour une variable membre pour indiquer le nombre de rectangles à dessiner et appelez update()
sur le widget. Ensuite, dans le paintEvent()
du widget, vérifiez la variable membre, dessinez vos rectangles et revenez le plus tôt possible.
(Pour plus de besoins d'animation complexes, un coup d'oeil à QTimeLine
.)
Je ne sais pas qt, mais je pense que la réponse réside dans l'utilisation d'une minuterie.
Essayez plutôt de sommeil cela pourrait aider
QTimer *t= new QTimer();
t->setSingleShot(true);
t->start(60000);//this is the time to sleep in this case 60 seconds
QEventLoop pause;
connect(t, SIGNAL(timeout()), &pause, SLOT(quit()));
pause.exec();//keeps the program responsive
Reportez-vous penser lien QEventLoop
- 1. difficulté qt primordial de paintEvent
- 2. Comment utiliser GLEW avec Qt?
- 3. Impossible de remplacer VideoWidget paintEvent() dans QT C++
- 4. Utiliser SQLite avec Qt
- 5. L'application paintEvent() retardée de QWidget
- 6. Obtenir QT pour répondre aux événements d'alimentation (sleep/hibernate)
- 7. Comment utiliser QT 4.6.3 Liaison avec Lazarus
- 8. Comment utiliser l'API CTelephony avec Qt Symbian
- 9. comment utiliser Qt setWindowFilePath
- 10. Utiliser mscomm ActiveX avec Qt
- 11. Comment utiliser QSerialDevice dans Qt?
- 12. Comment utiliser QGraphicsView dans Qt?
- 13. Comment utiliser iconv dans Qt?
- 14. Ovveride, le paintevent du Qwidget
- 15. iphone: sleepUntilDate vs sleep
- 16. Pourquoi QWidget :: paintEvent n'est pas appelé?
- 17. sleep() dans Javascript
- 18. C++, sleep, et loops
- 19. usleep() provoquant tout "sleep"
- 20. Sleep dans android
- 21. Comment utiliser QCA (http://delta.affinix.com/qca/) avec Qt4.7 (Qt Creator)?
- 22. Comment puis-je utiliser le SDK Windows avec Qt Creator
- 23. [Qt] paintEvent n'est pas appelé dans le bouton personnalisé dérivé de QAbstractButton
- 24. Comment utiliser QXmlQuery correctement? (Qt XQuery/XPath)
- 25. sleep() silencieusement hogs CPU
- 26. Sleep Display Cocoa/Carbon
- 27. Comment Envoyer la discussion actuelle Sleep
- 28. Comment utiliser Qt et Scons ensemble?
- 29. Puis-je utiliser Qt sans qmake ou Qt Creator?
- 30. boost :: this_thread :: sleep() contre nanosleep()?
pouvez-vous s'il vous plaît me fournir une instantané que comment faire cela pour mon code? – CuriousCase
Attendez-vous à dessiner les quatre rectangles peinture événement fait d'autres choses aussi, et j'ai besoin du retard seulement pendant que les rectangles sont dessinés.Je ne peux pas appeler mise à jour plusieurs fois.Je ne sais pas comment utiliser QTimer. – CuriousCase