QStateMachine Class
La classe `QStateMachine` fournit une machine à états finis hiérarchique. En savoir plus...
| En-tête : | #include <QStateMachine> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS StateMachine) target_link_libraries(mytarget PRIVATE Qt6::StateMachine) |
| qmake : | QT += statemachine |
| Hérite de : | QState |
Remarque : toutes les fonctions de cette classe sont réentrantes.
Remarque : ces fonctions sont également sûres pour les threads:
- postEvent(QEvent *event, QStateMachine::EventPriority priority)
- postDelayedEvent(QEvent *event, int delay)
- cancelDelayedEvent(int id)
- postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
Types publics
| class | SignalEvent |
| class | WrappedEvent |
| enum | Error { NoError, NoInitialStateError, NoDefaultStateInHistoryStateError, NoCommonAncestorForTransitionError, StateMachineChildModeSetToParallelError } |
| enum | EventPriority { NormalPriority, HighPriority } |
Propriétés
- animated : bool
- errorString : QString
- globalRestorePolicy : QState::RestorePolicy
- running : bool
Fonctions publiques
| QStateMachine(QObject *parent = nullptr) | |
| virtual | ~QStateMachine() |
| void | addDefaultAnimation(QAbstractAnimation *animation) |
| void | addState(QAbstractState *state) |
| QBindable<bool> | bindableAnimated() |
| QBindable<QString> | bindableErrorString() const |
| QBindable<QState::RestorePolicy> | bindableGlobalRestorePolicy() |
| bool | cancelDelayedEvent(int id) |
| void | clearError() |
| QSet<QAbstractState *> | configuration() const |
| QList<QAbstractAnimation *> | defaultAnimations() const |
| QStateMachine::Error | error() const |
| QString | errorString() const |
| QState::RestorePolicy | globalRestorePolicy() const |
| bool | isAnimated() const |
| bool | isRunning() const |
| int | postDelayedEvent(QEvent *event, int delay) |
| int | postDelayedEvent(QEvent *event, std::chrono::milliseconds delay) |
| void | postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority) |
| void | removeDefaultAnimation(QAbstractAnimation *animation) |
| void | removeState(QAbstractState *state) |
| void | setAnimated(bool enabled) |
| void | setGlobalRestorePolicy(QState::RestorePolicy restorePolicy) |
Fonctions publiques réimplémentées
| virtual bool | eventFilter(QObject *watched, QEvent *event) override |
Slots publics
| void | setRunning(bool running) |
| void | start() |
| void | stop() |
Signaux
| void | runningChanged(bool running) |
| void | started() |
| void | stopped() |
Fonctions protégées réimplémentées
| virtual bool | event(QEvent *e) override |
| virtual void | onEntry(QEvent *event) override |
| virtual void | onExit(QEvent *event) override |
Description détaillée
QStateMachine s’appuie sur les concepts et la notation des diagrammes d’états (Statecharts). QStateMachine fait partie du frameworkQt State Machine .
Une machine à états gère un ensemble d’états (classes héritant de ` QAbstractState`) et de transitions (descendants de ` QAbstractTransition`) entre ces états ; ces états et ces transitions définissent un graphe d’états. Une fois le graphe d’états construit, la machine à états peut l’exécuter. L’algorithme d’exécution de QStateMachine repose sur l’algorithme State Chart XML (SCXML). La présentation du framework fournit plusieurs graphes d’états ainsi que le code permettant de les construire.
Utilisez la fonction ` addState()` pour ajouter un état de niveau supérieur à la machine à états. Les états sont supprimés à l’aide de la fonction ` removeState()`. Il est déconseillé de supprimer des états pendant que la machine est en cours d’exécution.
Avant de pouvoir démarrer la machine, l’état initial ( initial state ) doit être défini. L’état initial est l’état dans lequel la machine entre au démarrage. Vous pouvez ensuite démarrer la machine à états à l’aide de la fonction start(). Le signal started() est émis lorsque l’état initial est atteint.
La machine est pilotée par les événements et gère sa propre boucle d’événements. Les événements sont envoyés à la machine via la fonction ` postEvent()`. Notez que cela signifie qu’elle s’exécute de manière asynchrone et qu’elle ne progressera pas sans une boucle d’événements en cours d’exécution. En règle générale, vous n’aurez pas à envoyer d’événements directement à la machine, car les transitions de Qt, par exemple ` QEventTransition ` et ses sous-classes, se chargent de cette tâche. Cependant, pour les transitions personnalisées déclenchées par des événements, la fonction ` postEvent()` s’avère utile.
La machine à états traite les événements et effectue des transitions jusqu’à ce qu’un état final de niveau supérieur soit atteint ; la machine à états émet alors le signal ` finished()`. Vous pouvez également appeler explicitement ` stop()` sur la machine à états. Dans ce cas, le signal ` stopped()` est émis.
L'extrait de code suivant montre une machine à états qui s'arrête lorsqu'on clique sur un bouton :
QPushButton button;
QStateMachine machine;
QState *s1 = new QState();
s1->assignProperty(&button, "text", "Click me");
QFinalState *s2 = new QFinalState();
s1->addTransition(&button, &QPushButton::clicked, s2);
machine.addState(s1);
machine.addState(s2);
machine.setInitialState(s1);
machine.start();Cet exemple de code utilise la classe ` QState`, qui hérite de ` QAbstractState`. La classe ` QState ` fournit un état que vous pouvez utiliser pour définir des propriétés et appeler des méthodes sur des ` QObject` lors de l’entrée ou de la sortie de cet état. Elle contient également des fonctions pratiques pour ajouter des transitions, par exemple des ` QSignalTransition`, comme dans cet exemple. Consultez la description de la classe ` QState ` pour plus de détails.
Si une erreur survient, le système recherchera un état « error state » et, si celui-ci est disponible, il entrera dans cet état. Les types d’erreurs possibles sont décrits par l’énumération Error. Une fois l’état d’erreur atteint, le type d’erreur peut être récupéré à l’aide de la fonction error(). L’exécution du graphe d’états ne s’arrête pas lorsque l’état d’erreur est atteint. Si aucun état d’erreur ne correspond à l’état erroné, la machine cesse son exécution et un message d’erreur s’affiche sur la console.
Remarque : Important : définir le paramètre « ChildMode » d’une machine à états sur « parallel » (ParallelStates) rend la machine à états invalide. Il ne peut être défini (ou conservé) que sur « ExclusiveStates ».
Voir également « QAbstractState» , « QAbstractTransition », « QState » et la présentation de «Qt State Machine ».
Documentation sur les types de membres
enum QStateMachine::Error
Ce type d'énumération définit les erreurs pouvant survenir dans la machine à états lors de l'exécution. Lorsque la machine à états rencontre une erreur irrécupérable lors de l'exécution, elle définit le code d'erreur renvoyé par la fonction ` error()`, le message d'erreur renvoyé par la fonction ` errorString()`, puis passe dans un état d'erreur en fonction du contexte de l'erreur.
| Constante | Valeur | Description |
|---|---|---|
QStateMachine::NoError | 0 | Aucune erreur ne s’est produite. |
QStateMachine::NoInitialStateError | 1 | La machine est entrée dans une machine à états QState comportant des états enfants, mais pour laquelle aucun état initial n’a été défini. Le contexte de cette erreur est l’état pour lequel l’état initial est manquant. |
QStateMachine::NoDefaultStateInHistoryStateError | 2 | La machine est entrée dans une « QHistoryState » qui ne dispose pas d’un état par défaut défini. Le contexte de cette erreur est l’« QHistoryState » à laquelle il manque un état par défaut. |
QStateMachine::NoCommonAncestorForTransitionError | 3 | La machine a sélectionné une transition dont la source et les cibles ne font pas partie du même arbre d’états, et ne font donc pas partie de la même machine à états. Généralement, cela signifie que l’un des états n’a pas de parent ou n’a été ajouté à aucune machine. Le contexte de cette erreur est l’état source de la transition. |
QStateMachine::StateMachineChildModeSetToParallelError | 4 | La propriété ` childMode ` de la machine a été définie sur ` QState::ParallelStates`. Ceci est illégal. Seuls les états peuvent être déclarés comme parallèles, et non la machine à états elle-même. Cette valeur d'énumération a été ajoutée dans Qt 5.14. |
Voir également setErrorState().
enum QStateMachine::EventPriority
Ce type d'énumération spécifie la priorité d'un événement envoyé à la machine à états via la méthode ` postEvent()`.
Les événements de haute priorité sont traités avant ceux de priorité normale.
| Constante | Valeur | Description |
|---|---|---|
QStateMachine::NormalPriority | 0 | L’événement a une priorité normale. |
QStateMachine::HighPriority | 1 | L'événement a une priorité élevée. |
Documentation sur les propriétés
[bindable] animated : bool
Remarque : cette propriété prend en charge les liaisons de type « QProperty ».
Cette propriété indique si les animations sont activées
La valeur par défaut de cette propriété est « true ».
Voir aussi QAbstractTransition::addAnimation()
Fonctions d'accès :
| bool | isAnimated() const |
| void | setAnimated(bool enabled) |
[bindable read-only] errorString : QString
Remarque : cette propriété prend en charge les liaisons de type « QProperty ».
Cette propriété contient la chaîne d'erreur de cette machine à états
Fonctions d’accès :
| QString | errorString() const |
[bindable] globalRestorePolicy : QState::RestorePolicy
Remarque : cette propriété prend en charge les liaisons de type « QProperty ».
Cette propriété contient la stratégie de restauration des états de cette machine à états.
La valeur par défaut de cette propriété est QState::DontRestoreProperties.
Fonctions d'accès :
| QState::RestorePolicy | globalRestorePolicy() const |
| void | setGlobalRestorePolicy(QState::RestorePolicy restorePolicy) |
running : bool
Cette propriété contient l'état actuel de cette machine à états
Fonctions d'accès :
| bool | isRunning() const |
| void | setRunning(bool running) |
Signal de notification :
| void | runningChanged(bool running) |
Voir également start(), stop(), started(), stopped() et runningChanged().
Documentation des fonctions membres
[explicit] QStateMachine::QStateMachine(QObject *parent = nullptr)
Crée une nouvelle machine à états à partir de l'parent on fournie.
[virtual noexcept] QStateMachine::~QStateMachine()
Détruit cette machine à états.
void QStateMachine::addDefaultAnimation(QAbstractAnimation *animation)
Ajoute une règle par défaut « animation » à prendre en compte pour toute transition.
void QStateMachine::addState(QAbstractState *state)
Ajoute l'state on indiquée à cette machine à états. L'état devient un état de niveau supérieur et la machine à états en prend la propriété.
Si l'état se trouve déjà dans une autre machine, il sera d'abord supprimé de son ancienne machine, puis ajouté à cette machine.
Voir également ` removeState()` et ` setInitialState()`.
bool QStateMachine::cancelDelayedEvent(int id)
Annule l'événement différé identifié par l'id on fournie. L'identifiant doit être une valeur renvoyée par un appel à la fonction postDelayedEvent(). Renvoie true si l'événement a été annulé avec succès, sinon renvoie false.
Remarque : cette fonction est thread-safe.
Voir également postDelayedEvent().
void QStateMachine::clearError()
Efface la chaîne d'erreur et le code d'erreur de la machine à états.
QSet<QAbstractState *> QStateMachine::configuration() const
Renvoie l'ensemble maximal cohérent d'états (y compris les états parallèles et finaux) dans lesquels se trouve actuellement cette machine à états. Si un état s figure dans la configuration, le parent de s figure toujours également dans c. Notez toutefois que la machine elle-même ne fait pas explicitement partie de la configuration.
QList<QAbstractAnimation *> QStateMachine::defaultAnimations() const
Renvoie la liste des animations par défaut qui seront prises en compte pour toute transition.
QStateMachine::Error QStateMachine::error() const
Renvoie le code d'erreur de la dernière erreur survenue dans la machine à états.
QString QStateMachine::errorString() const
Renvoie la chaîne d'erreur correspondant à la dernière erreur survenue dans la machine à états.
Remarque : fonctiongetter pour la propriété errorString.
[override virtual protected] bool QStateMachine::event(QEvent *e)
Réimplémente : QState::event(QEvent *e).
[override virtual] bool QStateMachine::eventFilter(QObject *watched, QEvent *event)
Réimplémente : QObject::eventFilter(QObject *watched, QEvent *event).
QState::RestorePolicy QStateMachine::globalRestorePolicy() const
Renvoie la politique de restauration de la machine à états.
Remarque : fonctiongetter pour la propriété globalRestorePolicy.
Voir aussi setGlobalRestorePolicy().
bool QStateMachine::isAnimated() const
Indique si les animations sont activées pour cette machine à états.
Remarque : fonctiongetter pour la propriété « animated ».
[override virtual protected] void QStateMachine::onEntry(QEvent *event)
Réimplémente : QState::onEntry(QEvent *event).
Cette fonction appelle start() pour démarrer la machine à états.
[override virtual protected] void QStateMachine::onExit(QEvent *event)
Réimplémente : ` QState::onExit(QEvent *event)`.
Cette fonction appelle stop() pour arrêter la machine à états, puis émet le signal stopped().
int QStateMachine::postDelayedEvent(QEvent *event, int delay)
Envoie l'event on fournie pour traitement par cette machine à états, avec le délai delay en millisecondes. Renvoie un identifiant associé à l'événement différé, ou -1 si l'événement n'a pas pu être envoyé.
Cette fonction renvoie immédiatement un résultat. Une fois le délai écoulé, l’événement sera ajouté à la file d’attente des événements de la machine à états en vue de son traitement. La machine à états prend possession de l’événement et le supprime une fois qu’il a été traité.
Vous ne pouvez envoyer des événements que lorsque la machine à états est en cours d’exécution.
Remarque : cette fonction est thread-safe.
Voir également cancelDelayedEvent() et postEvent().
int QStateMachine::postDelayedEvent(QEvent *event, std::chrono::milliseconds delay)
Envoie l'event on fournie pour traitement par cette machine à états, avec le délai delay en millisecondes. Renvoie un identifiant associé à l'événement différé, ou -1 si l'événement n'a pas pu être envoyé.
Cette fonction retourne immédiatement. Une fois le délai écoulé, l’événement sera ajouté à la file d’attente des événements de la machine à états pour y être traité. La machine à états prend possession de l’événement et le supprime une fois qu’il a été traité.
Vous ne pouvez envoyer des événements que lorsque la machine à états est en cours d’exécution.
Il s'agit d'une fonction surchargée.
Remarque : cette fonction est sûre pour les threads.
Voir également cancelDelayedEvent() et postEvent().
void QStateMachine::postEvent(QEvent *event, QStateMachine::EventPriority priority = NormalPriority)
Enregistre l'event on spécifiée de l'priority on spécifiée afin qu'elle soit traitée par cette machine à états.
Cette fonction renvoie immédiatement un résultat. L'événement est ajouté à la file d'attente des événements de la machine à états. Les événements sont traités dans l'ordre dans lequel ils ont été envoyés. La machine à états prend en charge l'événement et le supprime une fois qu'il a été traité.
Vous ne pouvez envoyer des événements que lorsque la machine à états est en cours d'exécution ou en phase de démarrage.
Remarque : cette fonction est thread-safe.
Voir également postDelayedEvent().
void QStateMachine::removeDefaultAnimation(QAbstractAnimation *animation)
Supprime « animation » de la liste des animations par défaut.
void QStateMachine::removeState(QAbstractState *state)
Supprime l'state on indiquée de cette machine à états. La machine à états libère la propriété de l'état.
Voir aussi ` addState()`.
[signal] void QStateMachine::runningChanged(bool running)
Ce signal est émis lorsque la propriété « running » est modifiée avec « running » comme argument.
Remarque : signalde notification pour la propriété « running ».
Voir également « QStateMachine::running ».
void QStateMachine::setAnimated(bool enabled)
Détermine si les animations sont « enabled » pour cette machine à états.
Remarque : fonctionde définition de la propriété animated.
Voir aussi ` isAnimated()`.
void QStateMachine::setGlobalRestorePolicy(QState::RestorePolicy restorePolicy)
Définit la politique de restauration de la machine à états sur « restorePolicy ». La politique de restauration par défaut est « QState::DontRestoreProperties ».
Remarque : fonctionde définition de la propriété ` globalRestorePolicy`.
Voir également globalRestorePolicy().
[slot] void QStateMachine::start()
Lance cette machine à états. La machine réinitialise sa configuration et passe à l'état initial. Lorsqu'un état final de niveau supérieur (QFinalState) est atteint, la machine émet le signal finished().
Remarque : une machine à états ne fonctionnera pas sans boucle d’événements active, telle que la boucle d’événements principale de l’application lancée avec QCoreApplication::exec() ou QApplication::exec().
Voir également started(), finished(), stop(), initialState() et setRunning().
[private signal] void QStateMachine::started()
Ce signal est émis lorsque la machine à états est entrée dans son état initial (QStateMachine::initialState).
Remarque : il s’agit d’un signal privé. Il peut être utilisé dans les connexions de signaux, mais ne peut pas être émis par l’utilisateur.
Voir également QStateMachine::finished() et QStateMachine::start().
[slot] void QStateMachine::stop()
Arrête cette machine à états. La machine à états cessera de traiter les événements, puis émettra le signal stopped().
Voir également stopped(), start() et setRunning().
[private signal] void QStateMachine::stopped()
Ce signal est émis lorsque la machine à états s'est arrêtée.
Remarque : il s'agit d'un signal privé. Il peut être utilisé dans les connexions de signaux, mais ne peut pas être émis par l'utilisateur.
Voir également QStateMachine::stop() et QStateMachine::finished().
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.