Developpez.com - Rubrique Qt

Le Club des Développeurs et IT Pro

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 !
  Discussion forum
6 commentaires
  • ardoisebleue
    Membre 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 QStateMachine
  • ardoisebleue
    Membre 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)));
    et la fonction :
    Code :
    void Joueur::LeJoueurBouge(const QVariant &){    pvue->ensureVisible(this,200,200);}
    Bonne détente
    Daniel Génon
  • ardoisebleue
    Membre 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>
    - dans les fichiers .h où figure la ligne : #include <QtWidgets/QKeyEventTransition>,
    La modifier en supprimant "QtWidgets" :
    Code :
    #include <QKeyEventTransition>
    - dans les fichiers .cpp où figure la ligne : #include <QtCore/QSignalTransition>,
    La modifier en supprimant "QtCore" :
    Code :
    #include <QSignalTransition>
    Et la compilation devrait se réaliser sans souci.

    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.
  • ardoisebleue
    Membre 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.2
  • ardoisebleue
    Membre 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 lecture