Qt SCXML 개요

Qt SCXML 모듈은 Qt 응용 프로그램에 상태 차트 XML(SCXML) 파일에서 생성된 상태 머신을 임베드하기 위한 클래스를 제공합니다. SCXML 파일은 텍스트 편집기나 시뮬레이터와 같은 적절한 도구를 사용하여 생성할 수 있으며, SCXML 사양을 준수하는 한 SCXML 준수에 설명된 제한 사항과 확장을 준수합니다.

애플리케이션 로직의 일부는 캡슐화된 SCXML 파일로 대체할 수 있습니다. 이렇게 하면 Qt Quick 또는 Qt Widgets 을 사용하여 애플리케이션 로직과 사용자 인터페이스 구현을 명확하게 구분할 수 있습니다.

Qt SCXML 모듈은 상태 머신 프레임워크의 Qt State Machine 모듈의 상태 머신 프레임워크와 다른 점은 Qt SCXML 이 호환되는 SCXML 문서를 구문 분석하고 처리할 수 있는 호환 프로세서를 제공한다는 점입니다. Qt SCXML 에서 상태 머신은 별도의 SCXML 파일에서 읽혀지고 QScxmlStateMachine 클래스를 인스턴스화하고 SCXML 파일을 동적으로 로드하거나 Qt SCXML 컴파일러를 사용하여 인스턴스화된 QScxmlStateMachine 의 서브클래스를 생성함으로써 Qt 애플리케이션에 통합됩니다. SCXML 문서와의 통신은 QScxmlStateMachine 클래스의 신호와 메서드를 통해 제공됩니다.

기본 상태 머신 개념인 상태, 전환이벤트는 SCXML 사양에 나와 있는 개념을 기반으로 합니다. 상태 차트는 시스템이 자극에 반응하는 방식을 그래픽으로 모델링하는 방법을 제공합니다. 이는 시스템이 있을 수 있는 가능한 상태와 시스템이 한 상태에서 다른 상태로 이동하는 방법(상태 간 전환)을 정의함으로써 이루어집니다. 이벤트 기반 시스템(예: Qt 애플리케이션)의 주요 특징은 동작이 종종 마지막 또는 현재 이벤트뿐만 아니라 그 이전의 이벤트에 따라 달라진다는 것입니다. 상태 차트를 사용하면 이러한 정보를 쉽게 표현할 수 있습니다.

Qt SCXML 예를 들어, 상태 간 전환은 신호에 의해 트리거될 수 있으며, 상태는 속성을 설정하고 QObjects 에서 메서드를 호출하도록 구성할 수 있습니다. Qt의 이벤트 시스템은 상태 머신을 구동하는 데 사용됩니다.

Qt SCXML 의 상태 그래프는 계층 구조입니다. 상태는 다른 상태 안에 중첩될 수 있으며, 상태 머신의 현재 구성은 현재 활성화된 상태의 집합으로 구성됩니다.

데이터 모델

Qt SCXML 은 호환되는 SCXML 프로세서에서 지원해야 하는 널 데이터 모델과 ECMAScript 데이터 모델을 지원합니다. 또한 Qt SCXML 에서는 QScxmlCppDataModel 클래스에 의해 구현되는 자체 C++ 데이터 모델을 제공합니다. 이 클래스를 사용하면 expr 속성 및 <script> 요소에 대한 C++ 코드를 작성할 수 있습니다. 데이터 모델의 데이터 부분은 QScxmlCppDataModel 의 서브클래스에 의해 지원되며, Qt SCXML 컴파일러가 디스패치 메서드를 생성합니다.

Qt SCXML 컴파일러

Qt SCXML 컴파일러( qscxmlc)는 .scxml 파일을 읽고 SCXML에 정의된 대로 상태 머신을 구현하는 클래스가 포함된 C++ 소스 및 헤더 파일을 생성합니다. 컴파일러 사용에 대한 자세한 내용은 Qt SCXML 컴파일러 사용(qscxmlc)을 참조하세요.

동적으로 생성된 상태 머신과 컴파일된 상태 머신은 모두 동일한 방식으로 작동하며 동일한 속성, 상태, 데이터 모델 등을 갖습니다. 인스턴스화되는 방식만 다를 뿐입니다. 자세한 내용은 상태 머신 인스턴스화하기Qt SCXML 예제를 참조하세요.

로깅 카테고리

Qt SCXML 모듈은 다음과 같은 로깅 카테고리를 내보냅니다:

로깅 카테고리설명
qscxmlLogQt SCXML 모듈 로그를 활성화합니다.
scxmlLogSCXML 문서 로그를 활성화합니다.

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