2010-10-02 4 views
0

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

5

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.)

+0

pouvez-vous s'il vous plaît me fournir une instantané que comment faire cela pour mon code? – CuriousCase

+0

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

0

Je ne sais pas qt, mais je pense que la réponse réside dans l'utilisation d'une minuterie.

0

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