Utiliser le framework QStateMachine de Qt pour faciliter la maintenance de ses applications
Un tutoriel de Daniel Génon
Le 2021-03-13 10:09:06, par ardoisebleue, Membre confirmé
Chers membres du Club,
Je vous propose un tutoriel pour comprendre et utiliser la bibliothèque QStateMachine.
Il est composé d'un cours en dix étapes et d'un ensemble de dix projets à télécharger depuis un dépôt.
À la fin de ces cours vous aurez acquis les bases indispensables pour manier efficacement cette bibliothèque.
Rendez-vous à cette page : Apprendre les bases de la programmation de la bibliothèque QStateMachine
Servez-vous de cette discussion pour me faire part de vos remarques, commentaires ou d'éventuelles informations.
Je vous souhaite une bonne lecture, de profitables séances de tests et armez-vous de courage !
Je vous propose un tutoriel pour comprendre et utiliser la bibliothèque QStateMachine.
Il est composé d'un cours en dix étapes et d'un ensemble de dix projets à télécharger depuis un dépôt.
À la fin de ces cours vous aurez acquis les bases indispensables pour manier efficacement cette bibliothèque.
Rendez-vous à cette page : Apprendre les bases de la programmation de la bibliothèque QStateMachine
Servez-vous de cette discussion pour me faire part de vos remarques, commentaires ou d'éventuelles informations.
Je vous souhaite une bonne lecture, de profitables séances de tests et armez-vous de courage !
-
ardoisebleueMembre confirméPour parfaire votre apprentissage, vous pouvez suivre le cours sur la mise en œuvre des états parallèles à cette page :
les états parallèles avec le framework QStateMachinele 22/07/2021 à 11:07 -
ardoisebleueMembre confirméUn peu de récréation :
Ce qui suit n'a rien à voir avec QStateMachine, mais il permet d'utiliser la méthode ensureVisible de la classe QGraphicsView qui permet un effet visuel dans le déplacement du joueur, et s'intègre facilement dans la structure du programme déjà réalisé.
Pour réaliser cela, j'ai ajouté l'étape 11 au git QStateMachine, téléchargeable dans le document cité plus haut.
Actuellement, dans une scène de dimensions plus importantes que la zone graphique, le joueur disparaîtrait dès qu'il aurait atteint la limite de la zone, puisque les frontières de son déplacement sont définies par la dimension de la scène, donc de l'image.
L'effet assumé par ensureVisible est que la scène reste immobile, tant que le joueur se déplace dans un espace rectangulaire paramétré à l'intérieur de la zone graphique. Dès que ce joueur atteint une des limites de cet espace, il semble se fixer et déclenche le défilement de la scène, jusqu'à ce que un bord de cette scène arrive à la limite de la zone graphique et, alors, le joueur reprend son déplacement jusque la fin de la zone, où il se fixe.
Comme vous pourrez le constater dans le git téléchargé, j'ai ajouté une image plus grande : motif/fond2.png et modifié quelques fichiers. Ces modifications sont commentées dans les fichiers
Le plus stupéfiant c'est le peu de modifications nécessaires pour obtenir cet effet :
Dans la classe Joueur :
Code : connect(animationdelobjet,SIGNAL(valueChanged(QVariant)), this, SLOT(LeJoueurBouge(QVariant)));
Code : void Joueur::LeJoueurBouge(const QVariant &){ pvue->ensureVisible(this,200,200);}
Daniel Génonle 27/03/2021 à 10:03 -
ardoisebleueMembre confirméPour utiliser les projets TP des cours pour la version Qt 6.2, quelques petites modifications suffisent :
- dans les fichiers ".pro" ajouter la ligne : QT += statemachine.
- dans les fichiers .h et .cpp où figure la ligne : #include <QtCore/QStateMachine>,
La modifier en supprimant "QtCore" :
Code : #include <QStateMachine>
La modifier en supprimant "QtWidgets" :
Code : #include <QKeyEventTransition>
La modifier en supprimant "QtCore" :
Code : #include <QSignalTransition>
Il se peut que dans l'installation de la version Qt 6.2, la bibliothèque StateMachine ne soit pas attachée, utilisez le logiciel "MaintenanceTool" de Qt pour la télécharger.le 21/11/2021 à 18:21 -
ardoisebleueMembre confirméPour télécharger les projets exemples de la version QT 6.2.1 le dépôt Github est :
https://github.com/daniel-genon/TPqstatemachineQT6.2le 03/12/2021 à 18:27 -
ardoisebleueMembre confirméLorsque vous aurez fini ce cours, vous trouverez dans la troisième partie, traitant de l'utilisation de la classe QHistoryState, comment interrompre temporairement l'activité d'une "machine".
Vous y apprendrez aussi la procédure pour insérer dans la boucle de la machine votre propre événement pour activer une transition.
Et, dans la foulée, vous découvrirez quelques astuces pour déclencher des transitions par l'intermédiaire de la souris.
Pour assimiler la fin cette dernière partie, je recommande une expérience élémentaire sur les états parallèles dispensée dans cette deuxième partie du cours sur le framework QStateMachine.
Bon courage et bonne lecturele 06/07/2022 à 8:47