QScxmlStateMachine Class
La clase QScxmlStateMachine proporciona una interfaz para las máquinas de estado creadas a partir de archivos SCXML. Más...
| Cabecera: | #include <QScxmlStateMachine> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Scxml)target_link_libraries(mytarget PRIVATE Qt6::Scxml) |
| qmake: | QT += scxml |
| En QML: | ScxmlStateMachine |
| Hereda: | QObject |
Propiedades
|
|
Funciones públicas
| 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 |
Ranuras públicas
Señales
| 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) |
Miembros públicos estáticos
| 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) |
Funciones protegidas
| bool | isActive(int stateIndex) const |
Descripción Detallada
QScxmlStateMachine es una implementación de la Carta de Estados XML (SCXML).
Todos los estados que se definen en el archivo SCXML son accesibles como propiedades de QScxmlStateMachine. Estas propiedades son valores booleanos e indican si el estado está activo o inactivo.
Nota: El QScxmlStateMachine necesita un QEventLoop para funcionar correctamente. El bucle de eventos se utiliza para implementar el atributo delay para eventos y para programar el procesamiento de una máquina de estado cuando se reciben eventos de máquinas de estado anidadas (o padre).
Documentación de propiedades
[bindable] dataModel : QScxmlDataModel*
Nota: Esta propiedad soporta enlaces QProperty.
Esta propiedad contiene el modelo de datos que se utilizará para esta máquina de estado.
Los modelos de datos SCXML se describen en Especificación SCXML - 5 Modelo de datos y manipulación de datos. Para obtener más información sobre los modelos de datos admitidos, consulte Cumplimiento de SCXML.
Cambiar el modelo de datos cuando la máquina de estado ha sido initialized no está especificado en el estándar SCXML y conduce a un comportamiento indefinido.
Funciones de acceso:
| QScxmlDataModel * | dataModel() const |
| void | setDataModel(QScxmlDataModel *model) |
Señal de notificador:
| void | dataModelChanged(QScxmlDataModel *model) |
Véase también QScxmlDataModel, QScxmlNullDataModel y QScxmlCppDataModel.
[bindable] initialValues : QVariantMap
Nota: Esta propiedad admite los enlaces QProperty.
Esta propiedad contiene los valores iniciales que se utilizarán para configurar el modelo de datos.
Funciones de acceso:
| QVariantMap | initialValues() |
| void | setInitialValues(const QVariantMap &initialValues) |
Señal de notificador:
| void | initialValuesChanged(const QVariantMap &initialValues) |
Véase también QScxmlStateMachine::init() y QScxmlDataModel.
[bindable read-only] initialized : bool
Nota: Esta propiedad soporta QProperty bindings.
Esta propiedad indica si la máquina de estados ha sido inicializada.
Es true si la máquina de estados ha sido inicializada, false en caso contrario.
Funciones de acceso:
| bool | isInitialized() const |
Señal de notificador:
| void | initializedChanged(bool initialized) |
Véase también QScxmlStateMachine::init() y QScxmlDataModel.
[read-only] invoked : const bool
Esta propiedad mantiene si la máquina de estado fue invocada desde una máquina de estado externa.
true cuando la máquina de estado se inició como un servicio con el elemento <invoke>, false en caso contrario.
Funciones de acceso:
| bool | isInvoked() const |
[bindable read-only] invokedServices : QList<QScxmlInvokableService*>
Nota: Esta propiedad admite enlaces QProperty.
Esta propiedad contiene una lista de servicios SCXML que fueron invocados desde la máquina de estado principal (posiblemente de forma recursiva).
Funciones de acceso:
| QList<QScxmlInvokableService *> | invokedServices() const |
Señal de notificador:
| void | invokedServicesChanged(const QList<QScxmlInvokableService *> &invokedServices) |
[bindable] loader : QScxmlCompiler::Loader*
Nota: Esta propiedad soporta QProperty bindings.
Esta propiedad contiene el cargador que se utiliza actualmente para resolver y cargar URIs para la máquina de estado.
Funciones de acceso:
| QScxmlCompiler::Loader * | loader() const |
| void | setLoader(QScxmlCompiler::Loader *loader) |
Señal de notificador:
| void | loaderChanged(QScxmlCompiler::Loader *loader) |
[read-only] name : const QString
Esta propiedad contiene el nombre de la máquina de estado tal y como se establece en el atributo name de la etiqueta <scxml>.
Funciones de acceso:
| QString | name() const |
[read-only] parseErrors : const QList<QScxmlError>
Esta propiedad contiene la lista de errores de análisis que se han producido al crear una máquina de estados a partir de un archivo SCXML.
Funciones de acceso:
| QList<QScxmlError> | parseErrors() const |
running : bool
Esta propiedad contiene el estado de ejecución de esta máquina de estado
Funciones de acceso:
| bool | isRunning() const |
| void | setRunning(bool running) |
Señal de notificador:
| void | runningChanged(bool running) |
Véase también start().
[read-only] sessionId : const QString
Esta propiedad contiene el ID de sesión de la máquina de estado actual.
El ID de sesión se utiliza para el enrutamiento de mensajes entre las máquinas de estado padre e hija. Si una máquina de estado es iniciada por un elemento <invoke>, cualquier evento que envíe tendrá el campo invokeid establecido al ID de sesión. La máquina de estado utilizará el origen de un evento (que se establece mediante el atributo target o targetexpr en un elemento <send> ) para enviar mensajes a la máquina de estado hija correcta.
Funciones de acceso:
| QString | sessionId() const |
Véase también QScxmlEvent::invokeId().
[bindable] tableData : QScxmlTableData*
Nota: Esta propiedad admite los enlaces QProperty.
Esta propiedad contiene los datos de tabla que se utilizan al generar C++ a partir de un archivo SCXML.
La clase que implementa la máquina de estados utilizará esta propiedad para asignar los datos de tabla generados. La máquina de estados no asume la propiedad de los datos de la tabla.
Funciones de acceso:
| QScxmlTableData * | tableData() const |
| void | setTableData(QScxmlTableData *tableData) |
Señal de notificador:
| void | tableDataChanged(QScxmlTableData *tableData) |
Documentación de funciones miembro
[invokable] QStringList QScxmlStateMachine::activeStateNames(bool compress = true) const
Recupera una lista de nombres de estado de todos los estados activos.
Cuando un estado está activo, todos sus estados padre están activos por definición. Cuando compress es true (el valor predeterminado), los estados padre se filtrarán y sólo se devolverán los estados hoja. Cuando es false, se devuelve la lista completa de estados activos.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
[invokable] void QScxmlStateMachine::cancelDelayedEvent(const QString &sendId)
Cancela un evento retrasado con la dirección sendId especificada.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase 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)
Crea una conexión del type dado desde el evento especificado por scxmlEventSpec a functor, que puede ser un functor o una función miembro del objeto opcional context.
El functor del receptor debe tomar un QScxmlEvent como parámetro.
A diferencia de las especificaciones de eventos en documentos SCXML, aquí no se permiten espacios en scxmlEventSpec. Para conectarse a varios eventos con prefijos diferentes, connectToEvent() debe llamarse varias veces.
Devuelve un "handle" a la conexión, que puede ser utilizado más tarde para desconectarse.
QMetaObject::Connection QScxmlStateMachine::connectToEvent(const QString &scxmlEventSpec, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Crea una conexión del type especificado desde el evento especificado por scxmlEventSpec al method en el objeto receiver. El method del receptor puede tomar un QScxmlEvent como parámetro. Por ejemplo:
void mySlot(const QScxmlEvent &event);
A diferencia de las especificaciones de eventos en documentos SCXML, aquí no se permiten espacios en scxmlEventSpec. Para conectarse a varios eventos con prefijos diferentes, connectToEvent() debe llamarse varias veces.
Devuelve un "handle" a la conexión, que puede utilizarse posteriormente para desconectarse.
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)
Crea una conexión del type dado desde el estado especificado por scxmlStateName a functor, que puede ser un functor o una función miembro del objeto opcional context.
El functor del receptor debe tomar un argumento booleano que indique si el estado conectado se volvió activo o inactivo.
Devuelve un "handle" a la conexión, que puede ser utilizado posteriormente para desconectarse.
QMetaObject::Connection QScxmlStateMachine::connectToState(const QString &scxmlStateName, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)
Crea una conexión del type dado desde el estado identificado por scxmlStateName al method en el objeto receiver. El method del receptor puede tomar un argumento booleano que indica si el estado conectado pasó a ser activo o inactivo. Por ejemplo:
void mySlot(bool active);
Devuelve un "handle" a la conexión, que puede utilizarse posteriormente para desconectarse.
QScxmlDataModel *QScxmlStateMachine::dataModel() const
Devuelve el modelo de datos utilizado por la máquina de estados.
Nota: Función Getter para la propiedad dataModel.
Véase también setDataModel().
[signal] void QScxmlStateMachine::finished()
Esta señal se emite cuando la máquina de estados alcanza un estado final de nivel superior.
Véase también running.
[static] QScxmlStateMachine *QScxmlStateMachine::fromData(QIODevice *data, const QString &fileName = QString())
Crea una máquina de estados leyendo de QIODevice especificado por data.
Este método siempre devolverá una máquina de estados. Si se producen errores durante la lectura del archivo SCXML, fileName, la máquina de estados no podrá iniciarse. Los errores pueden recuperarse llamando al método parseErrors().
Véase también parseErrors().
[static] QScxmlStateMachine *QScxmlStateMachine::fromFile(const QString &fileName)
Crea una máquina de estados a partir del archivo SCXML especificado por fileName.
Este método siempre devolverá una máquina de estados. Si se producen errores durante la lectura del archivo SCXML, la máquina de estados no podrá iniciarse. Los errores pueden recuperarse llamando al método parseErrors().
Véase también parseErrors().
[slot] bool QScxmlStateMachine::init()
Inicializa la máquina de estados.
La inicialización de la máquina de estados consiste en llamar a QScxmlDataModel::setup(), establecer los valores iniciales de los elementos de <data> y ejecutar cualquier etiqueta <script> de la etiqueta <scxml>. Los valores iniciales de los datos se toman de la propiedad initialValues.
Devuelve false si se producen errores de análisis o si falla alguno de los pasos de inicialización. En caso contrario, devuelve true.
[invokable] bool QScxmlStateMachine::isActive(const QString &scxmlStateName) const
Devuelve true si el estado especificado por scxmlStateName está activo, false en caso contrario.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
[protected] bool QScxmlStateMachine::isActive(int stateIndex) const
Devuelve true si el estado con el ID stateIndex está activo.
Este método forma parte de la interfaz de la representación compilada de las máquinas de estado SCXML. Sólo debe utilizarse internamente y por máquinas de estado compiladas a partir de documentos SCXML.
[invokable] bool QScxmlStateMachine::isDispatchableTarget(const QString &target) const
Devuelve true si esta máquina de estado puede enviar un mensaje a target.
Los destinos válidos son
#_parentpara la máquina de estado padre si la máquina de estado actual es iniciada por<invoke>#_internalpara la máquina de estado actual#_scxml_sessioniddondesessionides el ID de sesión de la máquina de estado actual#_servicename, dondeservicenamees el ID o nombre de un servicio iniciado con<invoke>por esta máquina de estado
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
bool QScxmlStateMachine::isRunning() const
Devuelve true si la máquina de estados está funcionando, false en caso contrario.
Nota: Función Getter para la propiedad running.
Véase también setRunning() y runningChanged().
[signal] void QScxmlStateMachine::log(const QString &label, const QString &msg)
Esta señal se emite si se utiliza una etiqueta <log> en el SCXML. label es el valor del atributo label de la etiqueta <log>. msg es el valor del atributo expr evaluado de la etiqueta <log>. Si no hay atributo expr, se devuelve una cadena nula.
[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onEntry(Functor functor)
Devuelve un functor que acepta un argumento booleano y llama al functor dado si ese argumento es true. El functor dado no debe aceptar ningún argumento.
Esto es útil para envolver manejadores para connectToState() que sólo deben ejecutarse cuando se entra en el estado.
[static] std::function<void (bool)> QScxmlStateMachine::onEntry(const QObject *receiver, const char *method)
Devuelve un functor que acepta un argumento booleano y llama al method dado en receiver usando QMetaObject::invokeMethod() si ese argumento es true y receiver no ha sido borrado, todavía.
El method dado no debe aceptar ningún argumento. method es el nombre plano del método, no encerrado en SIGNAL() o SLOT().
Esto es útil para envolver manejadores para connectToState() que sólo deben ejecutarse cuando se entra en el estado.
[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onEntry(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
Devuelve un functor que acepta un argumento booleano y llama al method dado en receiver si ese argumento es true y el receiver no ha sido borrado, todavía. El method dado no debe aceptar ningún argumento.
Esto es útil para envolver manejadores para connectToState() que sólo deben ejecutarse cuando se entra en el estado.
[static] template <typename Functor> std::function<void (bool)> QScxmlStateMachine::onExit(Functor functor)
Devuelve un functor que acepta un argumento booleano y llama al functor dado si ese argumento es false. El functor dado no debe aceptar ningún argumento.
Esto es útil para envolver manejadores para connectToState() que sólo deben ejecutarse cuando se abandona el estado.
[static] std::function<void (bool)> QScxmlStateMachine::onExit(const QObject *receiver, const char *method)
Devuelve un functor que acepta un argumento booleano y llama al method dado en receiver usando QMetaObject::invokeMethod() si ese argumento es false y receiver no ha sido borrado, todavía.
El method dado no debe aceptar ningún argumento. method es el nombre plano del método, no encerrado en SIGNAL(...) o SLOT(...).
Esto es útil para envolver manejadores para connectToState() que sólo deben ejecutarse cuando se abandona el estado.
[static] template <typename PointerToMemberFunction> std::function<void (bool)> QScxmlStateMachine::onExit(const typename QtPrivate::FunctionPointer<PointerToMemberFunction>::Object *receiver, PointerToMemberFunction method)
Devuelve un functor que acepta un argumento booleano y llama al method dado en receiver si ese argumento es false y el receiver no ha sido borrado, todavía. El method dado no debe aceptar ningún argumento.
Esto es útil para envolver manejadores para connectToState() que sólo deben ejecutarse cuando se deja el estado.
[signal] void QScxmlStateMachine::reachedStableState()
Esta señal se emite cuando la cola de eventos está vacía al final de un paso de macro o cuando se alcanza un estado final.
[signal] void QScxmlStateMachine::runningChanged(bool running)
Esta señal se emite cuando se modifica la propiedad running con running como argumento.
Nota: Señal notificadora para la propiedad running.
void QScxmlStateMachine::setDataModel(QScxmlDataModel *model)
Establece el modelo de datos para esta máquina de estado en model. Existe una relación 1:1 entre las máquinas de estado y los modelos. Después de establecer el modelo una vez no se puede cambiar más. Cualquier otro intento de establecer el modelo usando este método será ignorado.
Nota: Función Setter para la propiedad dataModel.
Véase también dataModel().
void QScxmlStateMachine::setRunning(bool running)
Inicia la máquina de estados si running es true, o la detiene en caso contrario.
Nota: Función Setter para la propiedad running.
Ver también start(), stop(), isRunning(), y runningChanged().
[slot] void QScxmlStateMachine::start()
Inicia esta máquina de estados. Cuando se entra en un estado final de nivel superior, la máquina emitirá la señal finished().
Nota: Una máquina de estados no se ejecutará sin un bucle de eventos en ejecución, como el bucle de eventos de la aplicación principal iniciado con QCoreApplication::exec() o QApplication::exec().
Nota: Llamar a start() después de stop() no resultará en un reinicio completo de su configuración todavía, por lo que se recomienda encarecidamente no hacerlo.
Nota: Arrancar una máquina terminada produce una advertencia.
Véase también runningChanged(), setRunning(), stop(), y finished().
[invokable] QStringList QScxmlStateMachine::stateNames(bool compress = true) const
Recupera una lista de nombres de estado de todos los estados.
Cuando compress es true (el valor predeterminado), los estados que contienen estados hijos se filtrarán y sólo se devolverán los estados hoja. Cuando es false, se devuelve la lista completa de todos los estados.
La lista devuelta no contiene los estados de posibles máquinas de estados anidadas.
Nota: El orden de los nombres de estado en la lista es el orden en el que los estados aparecen en el documento SCXML.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
[slot] void QScxmlStateMachine::stop()
Detiene esta máquina de estados. La máquina no ejecutará más transiciones de estado. Su propiedad running se establece en false.
Ver también runningChanged(), start(), y setRunning().
[invokable] void QScxmlStateMachine::submitEvent(QScxmlEvent *event)
Envía el evento SCXML event a la cola de eventos interna o externa en función de la prioridad del evento.
Cuando se establece un retraso, el evento se pondrá en cola para su envío una vez transcurrido el tiempo de espera. La máquina de estados se apropia de event y lo borra después de procesarlo.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName)
Un método de utilidad para crear y enviar un evento externo con el eventName especificado como nombre.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase Q_INVOKABLE.
[invokable] void QScxmlStateMachine::submitEvent(const QString &eventName, const QVariant &data)
Un método de utilidad para crear y enviar un evento externo con el eventName especificado como nombre y data como datos de carga útil.
Nota: Esta función puede invocarse a través del sistema de metaobjetos y desde QML. Véase 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.