Sur cette page

QScxmlStateMachine Class

La classe QScxmlStateMachine fournit une interface permettant d'accéder aux machines à états créées à partir de fichiers SCXML. En savoir plus...

En-tête : #include <QScxmlStateMachine>
CMake : find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qmake : QT += scxml
En QML : ScxmlStateMachine
Hérite de : QObject

Propriétés

Fonctions publiques

QStringList activeStateNames(bool compress = true) const
QBindable<QScxmlDataModel *> bindableDataModel()
QBindable<QVariantMap> bindableInitialValues()
QBindable<bool> bindableInitialized() const
QBindable<QList<QScxmlInvokableService *>> bindableInvokedServices()
QBindable<QScxmlCompiler::Loader *> bindableLoader()
QBindable<QScxmlTableData *> bindableTableData()
void cancelDelayedEvent(const QString &sendId)
QMetaObject::Connection connectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
QMetaObject::Connection connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
QScxmlDataModel *dataModel() const
QVariantMap initialValues()
QList<QScxmlInvokableService *> invokedServices() const
bool isActive(const QString &scxmlStateName) const
bool isDispatchableTarget(const QString &target) const
bool isInitialized() const
bool isInvoked() const
bool isRunning() const
QScxmlCompiler::Loader *loader() const
QString name() const
QList<QScxmlError> parseErrors() const
QString sessionId() const
void setDataModel(QScxmlDataModel *model)
void setInitialValues(const QVariantMap &initialValues)
void setLoader(QScxmlCompiler::Loader *loader)
void setRunning(bool running)
void setTableData(QScxmlTableData *tableData)
QStringList stateNames(bool compress = true) const
void submitEvent(QScxmlEvent *event)
void submitEvent(const QString &eventName)
void submitEvent(const QString &eventName, const QVariant &data)
QScxmlTableData *tableData() const

Emplacements publics

bool init()
void start()
void stop()

Signaux

void dataModelChanged(QScxmlDataModel *model)
void finished()
void initialValuesChanged(const QVariantMap &initialValues)
void initializedChanged(bool initialized)
void invokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices)
void loaderChanged(QScxmlCompiler::Loader *loader)
void log(const QString &label, const QString &msg)
void reachedStableState()
void runningChanged(bool running)
void tableDataChanged(QScxmlTableData *tableData)

Membres publics statiques

QScxmlStateMachine *fromData(QIODevice *data, const QString &fileName = QString())
QScxmlStateMachine *fromFile(const QString &fileName)
std::function<void (bool)> onEntry(Functor functor)
std::function<void (bool)> onEntry(const QObject *receiver, const char *method)
std::function<void (bool)> onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
std::function<void (bool)> onExit(Functor functor)
std::function<void (bool)> onExit(const QObject *receiver, const char *method)
std::function<void (bool)> onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

Fonctions protégées

bool isActive(int stateIndex) const

Description détaillée

QScxmlStateMachine est une implémentation du langage SCXML (State Chart XML).

Tous les états définis dans le fichier SCXML sont accessibles en tant que propriétés de QScxmlStateMachine. Ces propriétés sont des valeurs booléennes et indiquent si l'état est actif ou inactif.

Remarque : QScxmlStateMachine nécessite une boucle d'événements ( QEventLoop ) pour fonctionner correctement. La boucle d'événements sert à implémenter l'attribut « delay » pour les événements et à planifier le traitement d'une machine à états lorsque des événements sont reçus de machines à états imbriquées (ou parentes).

Documentation des propriétés

[bindable] dataModel : QScxmlDataModel*

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient le modèle de données à utiliser pour cette machine à états.

Les modèles de données SCXML sont décrits dans la spécification SCXML - 5 Modèle de données et manipulation des données. Pour plus d’informations sur les modèles de données pris en charge, consultez la section Conformité SCXML.

La modification du modèle de données une fois que la machine à états a été « initialized » n’est pas spécifiée dans la norme SCXML et entraîne un comportement indéfini.

Fonctions d’accès :

QScxmlDataModel *dataModel() const
void setDataModel(QScxmlDataModel *model)

Signal de notification :

void dataModelChanged(QScxmlDataModel *model)

Voir également « QScxmlDataModel », « QScxmlNullDataModel » et « QScxmlCppDataModel ».

[bindable] initialValues : QVariantMap

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient les valeurs initiales à utiliser pour la configuration du modèle de données.

Fonctions d'accès :

QVariantMap initialValues()
void setInitialValues(const QVariantMap &initialValues)

Signal de notification :

void initialValuesChanged(const QVariantMap &initialValues)

Voir également QScxmlStateMachine::init() et QScxmlDataModel.

[bindable read-only] initialized : bool

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété indique si la machine à états a été initialisée.

Elle vaut « true » si la machine à états a été initialisée, « false » dans le cas contraire.

Fonctions d'accès :

bool isInitialized() const

Signal de notification :

void initializedChanged(bool initialized)

Voir également QScxmlStateMachine::init() et QScxmlDataModel.

[read-only] invoked : const bool

Cette propriété indique si la machine à états a été appelée à partir d'une machine à états externe.

true lorsque la machine à états a été lancée en tant que service avec l'élément <invoke>, false dans le cas contraire.

Fonctions d'accès :

bool isInvoked() const

[bindable read-only] invokedServices : QList<QScxmlInvokableService*>

Remarque : cette propriété prend en charge les liaisons « QProperty ».

Cette propriété contient une liste des services SCXML qui ont été appelés depuis la machine à états principale (éventuellement de manière récursive).

Fonctions d'accès :

QList<QScxmlInvokableService *> invokedServices() const

Signal de notification :

void invokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices)

[bindable] loader : QScxmlCompiler::Loader*

Remarque : cette propriété prend en charge les liaisons de type « QProperty ».

Cette propriété contient le chargeur actuellement utilisé pour résoudre et charger les URI de la machine à états.

Fonctions d'accès :

QScxmlCompiler::Loader *loader() const
void setLoader(QScxmlCompiler::Loader *loader)

Signal de notification :

void loaderChanged(QScxmlCompiler::Loader *loader)

[read-only] name : const QString

Cette propriété contient le nom de la machine à états tel qu'il est défini par l'attribut « name » de la balise <scxml>.

Fonctions d'accès :

QString name() const

[read-only] parseErrors : const QList<QScxmlError>

Cette propriété contient la liste des erreurs d'analyse survenues lors de la création d'une machine à états à partir d'un fichier SCXML.

Fonctions d'accès :

QList<QScxmlError> parseErrors() const

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().

[read-only] sessionId : const QString

Cette propriété contient l'identifiant de session de la machine à états actuelle.

L'identifiant de session est utilisé pour le routage des messages entre les machines à états parentes et filles. Si une machine à états est lancée par un élément ` <invoke> `, tout événement qu'elle envoie aura le champ ` invokeid ` défini sur l'identifiant de session. La machine à états utilisera l’origine d’un événement (définie par l’attribut « target » ou « targetexpr » dans un élément « <send> ») pour acheminer les messages vers la machine à états fille appropriée.

Fonctions d’accès :

QString sessionId() const

Voir également ` QScxmlEvent::invokeId()`.

[bindable] tableData : QScxmlTableData*

Remarque : cette propriété prend en charge les liaisons QProperty.

Cette propriété contient les données du tableau utilisées lors de la génération de code C++ à partir d'un fichier SCXML.

La classe implémentant la machine à états utilisera cette propriété pour attribuer les données de table générées. La machine à états ne prend pas possession des données de table.

Fonctions d'accès :

QScxmlTableData *tableData() const
void setTableData(QScxmlTableData *tableData)

Signal de notification :

void tableDataChanged(QScxmlTableData *tableData)

Documentation des fonctions membres

[invokable] QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const

Récupère la liste des noms de tous les états actifs.

Lorsqu’un état est actif, tous ses états parents le sont par définition. Lorsque compress est défini sur true (valeur par défaut), les états parents sont filtrés et seuls les états feuilles sont renvoyés. Lorsqu’il est défini sur false, la liste complète des états actifs est renvoyée.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[invokable] void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)

Annule un événement différé avec l’ sendId spécifiée.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

Crée une connexion de l'type donnée, à partir de l'événement spécifié par scxmlEventSpec vers functor, qui peut être un foncteur ou une fonction membre de l'objet facultatif context.

L'functor du récepteur doit prendre un QScxmlEvent en paramètre.

Contrairement aux spécifications d'événements dans les documents SCXML, les espaces ne sont pas autorisés dans l'scxmlEventSpec ici. Afin de se connecter à plusieurs événements ayant des préfixes différents, connectToEvent() doit être appelée plusieurs fois.

Renvoie un descripteur de connexion, qui pourra être utilisé ultérieurement pour se déconnecter.

QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

Crée une connexion de l’ type spécifiée, depuis l’événement indiqué par scxmlEventSpec vers l’ method dans l’objet receiver. La méthode method du récepteur peut prendre une QScxmlEvent en paramètre. Par exemple :

void mySlot(const QScxmlEvent &event);

Contrairement aux spécifications d’événements dans les documents SCXML, les espaces ne sont pas autorisés dans l’ scxmlEventSpec. Afin de se connecter à plusieurs événements avec des préfixes différents, la méthode connectToEvent() doit être appelée plusieurs fois.

Renvoie un descripteur de connexion, qui peut être utilisé ultérieurement pour se déconnecter.

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)

Crée une connexion de l’ type donnée, à partir de l’état spécifié par scxmlStateName vers functor, qui peut être un foncteur ou une fonction membre de l’objet facultatif context.

L'functor du récepteur doit prendre un argument booléen indiquant si l'état connecté est devenu actif ou inactif.

Renvoie un descripteur de la connexion, qui pourra être utilisé ultérieurement pour se déconnecter.

QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

Crée une connexion entre l'type donnée et l'état identifié par scxmlStateName, vers l'method de l'objet receiver. La méthode method du récepteur peut prendre un argument booléen indiquant si l'état connecté est devenu actif ou inactif. Par exemple :

void mySlot(bool active);

Renvoie un descripteur de connexion, qui pourra être utilisé ultérieurement pour se déconnecter.

QScxmlDataModel *QScxmlStateMachine::dataModel() const

Renvoie le modèle de données utilisé par la machine à états.

Remarque : fonctiongetter pour la propriété dataModel.

Voir aussi setDataModel().

[signal] void QScxmlStateMachine::finished()

Ce signal est émis lorsque la machine à états atteint un état final de niveau supérieur.

Voir également running.

[static] QScxmlStateMachine *QScxmlStateMachine::fromData(QIODevice *data, const QString &fileName = QString())

Crée une machine à états à partir du fichier QIODevice spécifié par data.

Cette méthode renvoie toujours une machine à états. Si des erreurs surviennent lors de la lecture du fichier SCXML fileName, la machine à états ne peut pas être lancée. Les erreurs peuvent être récupérées en appelant la méthode parseErrors().

Voir également parseErrors().

[static] QScxmlStateMachine *QScxmlStateMachine::fromFile(const QString &fileName)

Crée une machine à états à partir du fichier SCXML spécifié par fileName.

Cette méthode renvoie toujours une machine à états. Si des erreurs surviennent lors de la lecture du fichier SCXML, la machine à états ne peut pas être lancée. Les erreurs peuvent être récupérées en appelant la méthode parseErrors().

Voir également parseErrors().

[slot] bool QScxmlStateMachine::init()

Initialise la machine à états.

L'initialisation de la machine à états consiste à appeler la méthode ` QScxmlDataModel::setup()`, à définir les valeurs initiales des éléments ` <data> ` et à exécuter toutes les balises ` <script> ` de la balise ` <scxml> `. Les valeurs initiales des données sont extraites de la propriété ` initialValues `.

Renvoie ` false ` si des erreurs d’analyse se produisent ou si l’une des étapes d’initialisation échoue. Renvoie ` true ` dans le cas contraire.

[invokable] bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const

Renvoie « true » si l'état spécifié par « scxmlStateName » est actif, et « false » dans le cas contraire.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[protected] bool QScxmlStateMachine::isActive(int stateIndex) const

Renvoie « true » si l'état dont l'ID est « stateIndex » est actif.

Cette méthode fait partie de l'interface de la représentation compilée des machines à états SCXML. Elle ne doit être utilisée qu'en interne et par les machines à états compilées à partir de documents SCXML.

[invokable] bool QScxmlStateMachine::isDispatchableTarget(const QString &target) const

Renvoie « true » si un message destiné à « target » peut être envoyé par cette machine à états.

Les cibles valides sont :

  • #_parent la machine à états parente si la machine à états actuelle est lancée par <invoke>
  • #_internal pour la machine à états actuelle
  • #_scxml_sessionid, où sessionid est l’ID de session de la machine à états actuelle
  • #_servicename, où servicename est l’identifiant ou le nom d’un service lancé avec l’option « <invoke> » par cette machine à états

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

bool QScxmlStateMachine::isRunning() const

Renvoie « true » si la machine à états est en cours d'exécution, « false » dans le cas contraire.

Remarque : fonctionde récupération pour la propriété running.

Voir également setRunning() et runningChanged().

[signal] void QScxmlStateMachine::log(const QString &label, const QString &msg)

Ce signal est émis si une balise ` <log> ` est utilisée dans le SCXML. ` label ` correspond à la valeur de l'attribut `label` de la balise ` <log> `. ` msg ` correspond à la valeur de l'attribut `expr` (après évaluation) de la balise ` <log> `. En l'absence d'attribut `expr`, une chaîne vide est renvoyée.

[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onEntry(Functor functor)

Renvoie un foncteur qui accepte un argument booléen et appelle l’ functor on fournie si cet argument est « true ». L’ functor on fournie ne doit accepter aucun argument.

Ceci est utile pour encapsuler des gestionnaires destinés à ` connectToState()` qui ne doivent être exécutés que lorsque l’état est activé.

[static] std::function<void (bool)> QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)

Renvoie un foncteur qui accepte un argument booléen et appelle l'method on donnée sur receiver à l'aide de QMetaObject::invokeMethod() si cet argument est true et si receiver n'a pas encore été supprimé.

L’ method e fournie ne doit accepter aucun argument. « method » correspond au nom de la méthode tel quel, sans être encadré par « SIGNAL() » ou « SLOT() ».

Cela est utile pour encapsuler des gestionnaires pour connectToState() qui ne doivent être exécutés que lorsque l’état est activé.

[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

Renvoie un functor qui accepte un argument booléen et appelle l'method on donnée sur receiver si cet argument est true et si l'receiver n'a pas encore été supprimée. L'method on donnée ne doit accepter aucun argument.

Cela est utile pour encapsuler des gestionnaires pour connectToState() qui ne doivent être exécutés que lorsque l'état est activé.

[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onExit(Functor functor)

Renvoie un foncteur qui accepte un argument booléen et appelle l’ functor donnée si cet argument est « false ». L’ functor donnée ne doit accepter aucun argument.

Ceci est utile pour encapsuler des gestionnaires de l'connectToState() qui ne doivent être exécutés que lorsque l'on quitte l'état.

[static] std::function<void (bool)> QScxmlStateMachine::onExit(const QObject *receiver, const char *method)

Renvoie un foncteur qui accepte un argument booléen et appelle l’ method on donnée sur receiver à l’aide de QMetaObject::invokeMethod() si cet argument est false et si receiver n’a pas encore été supprimé.

L'method e fournie ne doit accepter aucun argument. method correspond au nom de la méthode tel quel, sans être encadré par SIGNAL(...) ou SLOT(...).

Cela est utile pour encapsuler des gestionnaires autour d’ connectToState() qui ne doivent être exécutés que lorsque l’état est quitté.

[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)

Renvoie un foncteur qui accepte un argument booléen et appelle l'method donnée sur receiver si cet argument est false et si le receiver n'a pas encore été supprimé. L'method donnée ne doit accepter aucun argument.

Cela est utile pour encapsuler des gestionnaires pour ` connectToState()` qui ne doivent être exécutés que lorsque l’état est quitté.

[signal] void QScxmlStateMachine::reachedStableState()

Ce signal est émis lorsque la file d'attente d'événements est vide à la fin d'une étape de macro ou lorsqu'un état final est atteint.

[signal] void QScxmlStateMachine::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.

void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)

Définit le modèle de données de cette machine à états sur model. Il existe une relation 1:1 entre les machines à états et les modèles. Une fois le modèle défini, il ne peut plus être modifié. Toute tentative ultérieure de définir le modèle à l'aide de cette méthode sera ignorée.

Remarque : fonctionde définition pour la propriété dataModel.

Voir également dataModel().

void QScxmlStateMachine::setRunning(bool running)

Lance la machine à états si running a la valeur true, ou l'arrête dans le cas contraire.

Remarque : fonctionde définition pour la propriété running.

Voir également start(), stop(), isRunning() et runningChanged().

[slot] void QScxmlStateMachine::start()

Lance cette machine à états. Lorsqu'un état final de niveau supérieur 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().

Remarque : l'appel de start() après stop() n'entraîne pas encore une réinitialisation complète de sa configuration ; il est donc fortement déconseillé de le faire.

Remarque : le démarrage d’une machine terminée génère un avertissement.

Voir également runningChanged(), setRunning(), stop() et finished().

[invokable] QStringList QScxmlStateMachine::stateNames(bool compress = true) const

Récupère la liste des noms de tous les États.

Lorsque ` compress ` est défini sur ` true ` (valeur par défaut), les états contenant des états enfants sont filtrés et seuls les états feuilles sont renvoyés. Lorsqu'il est défini sur ` false`, la liste complète de tous les états est renvoyée.

La liste renvoyée ne contient pas les états des machines à états imbriquées éventuelles.

Remarque : l’ordre des noms d’états dans la liste correspond à l’ordre dans lequel les états apparaissent dans le document SCXML.

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[slot] void QScxmlStateMachine::stop()

Arrête cette machine à états. La machine n'effectuera plus aucune transition d'état. Sa propriété « running » est définie sur « false ».

Voir également runningChanged(), start() et setRunning().

[invokable] void QScxmlStateMachine::submitEvent(QScxmlEvent *event)

Envoie l'event d'événement SCXML vers la file d'attente d'événements interne ou externe, en fonction de la priorité de l'événement.

Lorsqu'un délai est défini, l'événement est mis en file d'attente pour être transmis une fois le délai écoulé. La machine à états prend en charge l'event et la supprime après traitement.

Remarque : cette fonction peut être invoquée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName)

Méthode utilitaire permettant de créer et d'envoyer un événement externe portant le nom « eventName ».

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)

Méthode d'utilité permettant de créer et d'envoyer un événement externe avec le nom « eventName » et les données de charge utile « data ».

Remarque : cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.

© 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.