Qt SCXML 개요
Qt SCXML 모듈은 State Chart XML(SCXML) 파일로 생성된 상태 머신을 Qt 애플리케이션에 내장하기 위한 클래스를 제공합니다. SCXML 파일은 텍스트 편집기나 시뮬레이터와 같은 적절한 도구를 사용하여 생성할 수 있으며, 단 SCXML 준수 항목에 설명된 제한 사항 및 확장 사항을 준수하고 SCXML 사양을 따르는 경우에 한합니다.
애플리케이션 로직의 일부를 캡슐화된 SCXML 파일로 대체할 수 있습니다. 이를 통해 Qt Quick 또는 Qt Widgets 를 사용하여 애플리케이션 로직과 사용자 인터페이스 구현을 명확하게 구분할 수 있습니다.
Qt SCXML 모듈은 State Machine 프레임워크와 다음과 같은 점에서 차이가 있습니다. Qt State MachineQt SCXML 모듈은 표준을 준수하는 SCXML 문서를 구문 분석하고 처리할 수 있는 표준 준수 프로세서를 제공한다는 점에서 State Machine 프레임워크와 다릅니다. Qt SCXML 에서는 상태 머신이 별도의 SCXML 파일에서 읽혀지며, QScxmlStateMachine 클래스를 인스턴스화하고 SCXML 파일을 동적으로 로드하거나 Qt SCXML 컴파일러를 사용하여 생성된 QScxmlStateMachine 의 서브클래스를 인스턴스화함으로써 Qt 애플리케이션에 통합됩니다. SCXML 문서와의 통신은 QScxmlStateMachine 클래스의 시그널과 메서드를 통해 이루어집니다.
기본 상태 머신 개념인 상태( state), 전환(transition), 이벤트(event )는 SCXML 사양의 개념을 기반으로 합니다. 상태 차트는 시스템이 자극에 어떻게 반응하는지를 그래픽 방식으로 모델링해 줍니다. 이는 시스템이 취할 수 있는 가능한 상태와 시스템이 한 상태에서 다른 상태로 이동하는 방법(상태 간 전환)을 정의함으로써 이루어집니다. 이벤트 주도형 시스템(예: Qt 애플리케이션)의 주요 특징은 동작이 종종 마지막 또는 현재 이벤트뿐만 아니라 그 이전의 이벤트에도 의존한다는 점입니다. 상태 차트를 사용하면 이러한 정보를 쉽게 표현할 수 있습니다.
Qt SCXML Qt의 메타 객체 시스템과 긴밀하게 통합되어 있습니다. 예를 들어, 상태 간 전환은 시그널에 의해 트리거될 수 있으며, 상태를 구성하여 QObjects 의 속성을 설정하고 메서드를 호출할 수 있습니다. Qt의 이벤트 시스템은 상태 머신을 구동하는 데 사용됩니다.
Qt SCXML 의 상태 그래프는 계층적입니다. 상태는 다른 상태 안에 중첩될 수 있으며, 상태 머신의 현재 구성은 현재 활성화된 상태들의 집합으로 이루어집니다.
데이터 모델
Qt SCXML 는 표준을 준수하는 SCXML 프로세서가 반드시 지원해야 하는 null 데이터 모델과 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 모듈은 다음 로깅 범주를 내보냅니다:
| 로깅 범주 | 설명 |
|---|---|
| qscxmlLog | Qt SCXML 모듈의 로깅을 활성화합니다. |
| scxmlLog | SCXML 문서의 로깅을 활성화합니다 |
© 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.