affichage d'un compte à rebours avec Qt

affichage d'un compte à rebours avec Qt - C++ - Programmation

Marsh Posté le 12-05-2008 à 12:12:26    


 
Bonjour à tous
 
Je souhaite réaliser un compte à rebourd, et afficher le temps qui passe. J'ai donc utilisé QTimer, et pour j'ai pensé utliser un QLCDNumber. J'ai créé une nouvelle classe héritant de QTimer pour créer un signal qui emet le temps qui reste du QTimer, je vous met le constructeur de mon QTimer personnalisé :
 

Code :
  1. MyQTimer::MyQTimer(QObject * parent) : QTimer(parent)
  2. {
  3.     int i=4;
  4.     while (isActive()==true)
  5.     {
  6.         if (timerId()==1000*i)
  7.         {
  8.             emit tempsEcoule(i);
  9.             i--;
  10.         }
  11.     }
  12. }


 
Et voilà la connexion que je fais dans ma classe qui utilise MyQTimer:
 

Code :
  1. MyQTimer* timer = new MyQTimer;
  2. timer->start(5000);
  3. QLCDNumber* m_lcd = new QLCDNumber(this);
  4. m_lcd->setSegmentStyle(QLCDNumber::Flat);
  5. QObject::connect(timer, SIGNAL(tempsEcoule(int)), m_lcd, SLOT(display(int)));


 
Mais le problème c'est que QLCDNumber. reste à zero, je ne comprend pas vraiment pourquoi.
 
Pouvez-vous m'aider?
 
Merci
 
 
 
 
 

Reply

Marsh Posté le 12-05-2008 à 12:12:26   

Reply

Marsh Posté le 12-05-2008 à 12:55:40    

un polling bloquant dans un constructeur ça pue:
- ça bloque au niveau du new MyQTimer, donc avant le start() (donc ça marche pas)
 
ensuite si le timer est orienté message, t'as des aléas donc il faut mesurer le temps un plus précisément (avec un QueryPerformanceTimer sous win32, a voir pour les autres os ou si Qt a une encapsulation de ça)
enfin ça dépends du niveau de blaireaumétrie souhaité de ton chronomètre :D


Message édité par bjone le 12-05-2008 à 13:15:10
Reply

Marsh Posté le 13-05-2008 à 16:34:56    

Salut,
 
Comme le dis bjone, faut pas boucler comme ça, puisque tu bloques l'exécution. Il vaut mieux faire un QTimer dont le timeout est émis toutes les 1000 ms, et connecté le signal timeout à un slot de ta classe faisant le calcul, et arrêtant le timer dès qu'il arrive à 0. Et c'est dans ce slot que tu met à jour l'affichage.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed