Bonjour, j'ai compris récemment que QTimer était une interface de QTimerEvent. J'aimerais savoir comment QTimerEvent fonctionne en interne et j'aimerais savoir à quoi correspond timerId() des deux classes énoncé précédemment. Merci à vous.
Bonjour, j'ai compris récemment que QTimer était une interface de QTimerEvent. J'aimerais savoir comment QTimerEvent fonctionne en interne et j'aimerais savoir à quoi correspond timerId() des deux classes énoncé précédemment. Merci à vous.
Dernière modification par dourouc05 ; 17/08/2011 à 21h35.
Les evènements timer existent dans tout objet héritant de QObject. timerEvent(QTimerEvent*) est appelé lorsqu'un timer défini sur un QObject arrive à échéance, et le timerId() retourne un int pour reconnaître lequel.
Tout cela est expliqué dans la doc Qt à QObject::startTimer()
Bonjour,
D'après moi, le timerId n'est pas une chose ultra utile pour l'utilisateur. ( A part s'il veut réimplémenté un Timer personnalisé, en héritant la classe, et encore )
Internalement, d'après moi ( faudra un jour que je regarde le code ), Qt doit avoir une liste de timer. Donc chacun de ces timer à un id ( ou index dans la liste ). La doc dit que lorsqu'un timer est terminé, l'indice est à -1, ( donc certainement plus présent dans la liste ).
À chaque start(), on va activer le timer ( démarrage coté du système ), mis en place dans la liste.
L'avantage d'avoir un indice, c'est que si l'utilisateur fait deux fois start de la même instance, on peut arrêter et redemarrer le timer, au lieu de le demarrer deux fois ( ce qui poserai surement des problèmes ).
Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi
Ma page sur DVP
Mon Portfolio
Qui connaît l'erreur, connaît la solution.
Pour le code source : http://qt.gitorious.org/qt/qt/blobs/...er.cpp#line215
QTimer fonctionne en interne simplement en appelant QObject::startTimer. C'est une API haut niveau permettant d'utiliser les TimerEvent sans devoir gérer des id.
QObject::startTimer crée un timer dans le QEventDispatcher qui gère en interne la boucle d'event (http://qt.gitorious.org/qt/qt/blobs/...t.cpp#line1586). Ce QEventDispatcher est OS dépend. Tu as par exemple le code pour windows là : http://qt.gitorious.org/qt/qt/blobs/...in.cpp#line582.
Doncà priori, le fonctionnement des TimerEvent est comme le dit LittleWhite : il y a en interne une liste d'id. A chaque cycle de la boucle d'event, on décompte les timers actifs. Si l'un d'eux est à 0, on lancer un TimerEvent et on remet le compteur à sa valeur initiale.
Partager