QScxmlStateMachine Class
La classe QScxmlStateMachine fournit une interface pour les machines à états créées à partir de fichiers SCXML. Plus d'informations...
| 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éritages : | 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
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 State Chart XML (SCXML).
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 qui indiquent si l'état est actif ou inactif.
Remarque : la QScxmlStateMachine a besoin d'une adresse QEventLoop pour fonctionner correctement. La boucle d'événements est utilisée pour mettre en œuvre l'attribut delay pour les événements et pour planifier le traitement d'une machine d'état lorsque des événements sont reçus de machines d'état imbriquées (ou parentes).
Documentation sur les propriétés
[bindable] dataModel : QScxmlDataModel*
Remarque : Cette propriété prend en charge les liaisons QProperty.
Cette propriété contient le modèle de données à utiliser pour cette machine d'état.
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, voir Conformité SCXML.
La modification du modèle de données lorsque l'automate d'état a été initialized n'est pas spécifiée dans la norme SCXML et entraîne un comportement non défini.
Fonctions d'accès :
| QScxmlDataModel * | dataModel() const |
| void | setDataModel(QScxmlDataModel *model) |
Notifier signal :
| void | dataModelChanged(QScxmlDataModel *model) |
Voir également QScxmlDataModel, QScxmlNullDataModel, et QScxmlCppDataModel.
[bindable] initialValues : QVariantMap
Note : Cette propriété prend en charge les liaisons QProperty.
Cette propriété contient les valeurs initiales à utiliser pour configurer le modèle de données.
Fonctions d'accès :
| QVariantMap | initialValues() |
| void | setInitialValues(const QVariantMap &initialValues) |
Signal Notificateur :
| void | initialValuesChanged(const QVariantMap &initialValues) |
Voir aussi QScxmlStateMachine::init() et QScxmlDataModel.
[bindable read-only] initialized : bool
Remarque : Cette propriété prend en charge les liaisons QProperty.
Cette propriété indique si la machine à états a été initialisée.
La valeur est true si l'automate à états a été initialisé, false dans le cas contraire.
Fonctions d'accès :
| bool | isInitialized() const |
Notifier signal :
| void | initializedChanged(bool initialized) |
Voir aussi QScxmlStateMachine::init() et QScxmlDataModel.
[read-only] invoked : const bool
Cette propriété indique si l'automate à états a été invoqué à partir d'un automate à états extérieur.
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*>
Note : Cette propriété prend en charge les liaisons QProperty.
Cette propriété contient une liste de services SCXML qui ont été invoqués à partir de la machine d'état principale (éventuellement de manière récursive).
Fonctions d'accès :
| QList<QScxmlInvokableService *> | invokedServices() const |
Notifier signal :
| void | invokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices) |
[bindable] loader : QScxmlCompiler::Loader*
Remarque : Cette propriété prend en charge les liaisons QProperty.
Cette propriété contient le chargeur actuellement utilisé pour résoudre et charger les URI de la machine d'état.
Fonctions d'accès :
| QScxmlCompiler::Loader * | loader() const |
| void | setLoader(QScxmlCompiler::Loader *loader) |
Notifier signal :
| void | loaderChanged(QScxmlCompiler::Loader *loader) |
[read-only] name : const QString
Cette propriété contient le nom de la machine d'état 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 de fonctionnement de cette machine à états.
Fonctions d'accès :
| bool | isRunning() const |
| void | setRunning(bool running) |
Signal de notification :
| void | runningChanged(bool running) |
Voir aussi start().
[read-only] sessionId : const QString
Cette propriété contient l'identifiant de session de l'automate d'état actuel.
L'identifiant de session est utilisé pour l'acheminement des messages entre les machines d'état parent et enfant. Si une machine à états est démarrée par un élément <invoke>, tout événement qu'elle envoie aura le champ invokeid fixé à l'identifiant de session. L'automate d'état utilisera l'origine d'un événement (qui est définie par l'attribut target ou targettexpr dans un élément <send> ) pour envoyer des messages à l'automate d'état enfant approprié.
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 de table utilisées lors de la génération de C++ à partir d'un fichier SCXML.
La classe qui implémente l'automate d'état utilisera cette propriété pour attribuer les données de table générées. La machine d'état n'assume pas la propriété des données de la table.
Fonctions d'accès :
| QScxmlTableData * | tableData() const |
| void | setTableData(QScxmlTableData *tableData) |
Signal Notificateur :
| void | tableDataChanged(QScxmlTableData *tableData) |
Member Function Documentation
[invokable] QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const
Récupère une liste de noms de tous les états actifs.
Lorsqu'un état est actif, tous ses états parents sont actifs par définition. Lorsque compress est true (par défaut), les états parents sont filtrés et seuls les états feuilles sont renvoyés. Lorsque la valeur est false, la liste complète des états actifs est renvoyée.
Remarque : cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
[invokable] void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)
Annule un événement retardé avec l'adresse sendId spécifiée.
Note : Cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
Crée une connexion du type type à partir de l'événement spécifié par scxmlEventSpec vers functor, qui peut être un foncteur ou une fonction membre de l'objet optionnel context.
L'objet 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 les scxmlEventSpec. Pour se connecter à plusieurs événements avec des préfixes différents, connectToEvent() doit être appelé plusieurs fois.
Renvoie une poignée à la connexion, qui peut être utilisée 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 du type type à partir de l'événement spécifié par scxmlEventSpec vers method dans l'objet receiver. L'objet method du destinataire peut prendre un 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'objet scxmlEventSpec. Pour se connecter à plusieurs événements avec des préfixes différents, connectToEvent() doit être appelé plusieurs fois.
Renvoie une poignée de connexion, qui peut être utilisée ultérieurement pour se déconnecter.
template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *context, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
template <typename Functor> QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, Functor &&functor, Qt::ConnectionType type = Qt::AutoConnection)
scxmlStateName Crée une connexion de l'état spécifié par type à functor, qui peut être un foncteur ou une fonction membre de l'objet optionnel context.
La fonction functor du récepteur doit prendre un argument booléen qui indique si l'état connecté est devenu actif ou inactif.
Renvoie une poignée à la connexion, qui peut être utilisée 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 de l'objet type donné de l'état identifié par scxmlStateName à l'objet method dans l'objet receiver. L'objet method du destinataire peut prendre un argument booléen qui indique si l'état connecté est devenu actif ou inactif. Par exemple :
void mySlot(bool active);
Renvoie une poignée à la connexion, qui peut être utilisée ultérieurement pour se déconnecter.
QScxmlDataModel *QScxmlStateMachine::dataModel() const
Renvoie le modèle de données utilisé par la machine à états.
Note : Fonction Getter 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 premier niveau.
Voir également running.
[static] QScxmlStateMachine *QScxmlStateMachine::fromData(QIODevice *data, const QString &fileName = QString())
Crée un automate à états en lisant dans le site QIODevice spécifié par data.
Cette méthode renvoie toujours un automate à é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 aussi 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 un automate à é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 aussi parseErrors().
[slot] bool QScxmlStateMachine::init()
Initialise la machine à états.
L'initialisation de la machine à états consiste à appeler 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 proviennent de la propriété initialValues.
Renvoie false en cas d'erreur d'analyse ou d'échec de l'une des étapes d'initialisation. Retourne true dans le cas contraire.
[invokable] bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const
Renvoie true si l'état spécifié par scxmlStateName est actif, false sinon.
Note : Cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
[protected] bool QScxmlStateMachine::isActive(int stateIndex) const
Renvoie true si l'état portant l'ID stateIndex est actif.
Cette méthode fait partie de l'interface avec 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 d'état.
Les cibles valides sont
#_parentpour l'automate d'état parent si l'automate d'état actuel est démarré par<invoke>#_internalpour l'automate d'état actuel#_scxml_sessionidoùsessionidest l'identifiant de session de l'automate à états actuel#_servicenamepour la machine à états actuelle , oùservicenameest l'ID ou le nom d'un service démarré avec<invoke>par cette machine à états.
Note : Cette fonction peut être invoquée via le système de méta-objets et à partir de 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.
Note : Fonction Getter pour la propriété running.
Voir aussi 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 est la valeur de l'attribut label de la balise <log>. msg est la valeur de l'attribut expr évalué de la balise <log>. S'il n'y a pas d'attribut expr, une chaîne nulle sera renvoyée.
[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onEntry(Functor functor)
Retourne un foncteur qui accepte un argument booléen et appelle le functor donné si cet argument est true. Le functor donné ne doit accepter aucun argument.
Ceci est utile pour envelopper des gestionnaires pour connectToState() qui ne doivent être exécutés que lorsque l'état est entré.
[static] std::function<void (bool)> QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)
Renvoie un foncteur qui accepte un argument booléen et appelle la méthode method sur receiver en utilisant QMetaObject::invokeMethod() si cet argument est true et si receiver n'a pas encore été supprimé.
La méthode donnée method ne doit accepter aucun argument. method est le nom de la méthode en clair, non entouré de SIGNAL() ou SLOT().
Ceci est utile pour envelopper des gestionnaires pour connectToState() qui ne doivent être exécutés que lorsque l'état est entré.
[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
Renvoie un foncteur qui accepte un argument booléen et appelle method sur receiver si cet argument est true et si receiver n'a pas encore été supprimé. Le method donné ne doit accepter aucun argument.
Ceci est utile pour envelopper des gestionnaires pour connectToState() qui ne doivent être exécutés que lorsque l'état est entré.
[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onExit(Functor functor)
Retourne un foncteur qui accepte un argument booléen et appelle le functor donné si cet argument est false. Le functor donné ne doit accepter aucun argument.
Ceci est utile pour envelopper des gestionnaires pour connectToState() qui ne doivent être exécutés que lorsque l'état est quitté.
[static] std::function<void (bool)> QScxmlStateMachine::onExit(const QObject *receiver, const char *method)
Renvoie un foncteur qui accepte un argument booléen et appelle la méthode method sur receiver en utilisant QMetaObject::invokeMethod() si cet argument est false et si receiver n'a pas encore été supprimé.
La méthode donnée method ne doit accepter aucun argument. method est le nom de la méthode en clair, non entouré de SIGNAL(...) ou de SLOT(...).
Ceci est utile pour envelopper les gestionnaires de 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 method sur receiver si cet argument est false et si receiver n'a pas encore été supprimé. Le method donné ne doit accepter aucun argument.
Ceci est utile pour envelopper 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 des événements est vide à la fin d'une étape de la 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.
Note : Signal de notification pour la propriété running.
void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)
Définit le modèle de données pour cette machine d'état à model. Il existe une relation 1:1 entre les machines d'état et les modèles. Après avoir défini le modèle une fois, vous ne pouvez plus le modifier. Toute nouvelle tentative de définition du modèle à l'aide de cette méthode sera ignorée.
Remarque : fonction de définition de la propriété dataModel.
Voir également dataModel().
void QScxmlStateMachine::setRunning(bool running)
Démarre la machine à états si running est true, ou l'arrête dans le cas contraire.
Remarque : fonction de définition de la propriété running.
Voir aussi start(), stop(), isRunning() et runningChanged().
[slot] void QScxmlStateMachine::start()
Démarre 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 une boucle d'événements en cours, telle que la boucle d'événements de l'application principale lancée avec QCoreApplication::exec() ou QApplication::exec().
Note : Appeler start() après stop() ne résultera pas en une réinitialisation complète de sa configuration, c'est pourquoi il est fortement déconseillé de le faire.
Note : Le démarrage d'une machine terminée entraîne un avertissement.
Voir aussi runningChanged(), setRunning(), stop(), et finished().
[invokable] QStringList QScxmlStateMachine::stateNames(bool compress = true) const
Récupère une liste de noms d'états de tous les états.
Lorsque compress est true (par défaut), les états qui contiennent des états enfants sont filtrés et seuls les états feuilles sont renvoyés. Lorsque la valeur est false, la liste complète de tous les états est renvoyée.
La liste renvoyée ne contient pas les états d'éventuelles machines à états imbriquées.
Remarque : l'ordre des noms d'états dans la liste correspond à l'ordre dans lequel les états apparaissent dans le document SCXML.
Note : Cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
[slot] void QScxmlStateMachine::stop()
Arrête cette machine d'état. La machine n'exécutera plus de transitions d'état. Sa propriété running est définie sur false.
Voir aussi runningChanged(), start() et setRunning().
[invokable] void QScxmlStateMachine::submitEvent(QScxmlEvent *event)
Soumet l'événement SCXML event à 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 sera mis en file d'attente pour livraison une fois le délai écoulé. La machine d'état prend possession de event et le supprime après traitement.
Remarque : cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName)
Méthode utilitaire permettant de créer et de soumettre un événement externe dont le nom est eventName.
Remarque : cette fonction peut être invoquée via le système de méta-objets et à partir de QML. Voir Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)
Méthode utilitaire permettant de créer et de soumettre un événement externe dont le nom est eventName et les données utiles data.
Remarque : cette fonction peut être invoquée via le système de méta-objets et à partir de 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.