SCXML 상태 차트 편집
상태 차트는 시스템이 자극에 어떻게 반응하는지를 그래픽으로 모델링하는 방법입니다. 상태 차트는 시스템이 취할 수 있는 상태와, 시스템이 한 상태에서 다른 상태로 이동하는 방법(상태 간전환 )을 정의합니다. 이벤트 기반 시스템(예: Qt 애플리케이션)의 동작은 종종 마지막 또는 현재 이벤트뿐만 아니라 이전 이벤트에도 좌우됩니다. 상태 차트를 사용하면 이러한 정보를 쉽게 공유할 수 있습니다.
Qt Creator 파일 마법사를 사용하면 상용구 코드가 포함된 State Chart XML(SCXML) 파일을 프로젝트에 추가할 수 있습니다. SCXML 편집기를 사용하여 상태 차트를 편집하고, 파일에 상태와 전이를 추가하십시오. 그런 다음, Qt SCXML 모듈의 클래스를 사용하여 파일에서 생성된 상태 머신을 Qt 애플리케이션에 임베드하십시오.
.scxml 파일을 열면 SCXML 편집기에서 열립니다.

Common States (1) 뷰에서 상태를 상태 편집기(2)로 드래그합니다. 상태 편집기에서 상태를 선택하고 도구 버튼(3)을 사용하여 전환(4)과 해당 대상 상태를 생성합니다.
Structure 뷰(5)에서 상태 차트 구조를 확인하고, Attributes 뷰(6)에서 선택한 상태나 전환에 대한 속성을 지정합니다.
상태 차트 탐색
툴바 버튼을 사용하여 상태 차트의 편집, 확대/축소, 확대, 탐색, 패닝과 같은 기능을 실행하고, 스크린샷을 찍거나 통계를 볼 수 있습니다.
| 버튼 | 이름 | 설명 |
|---|---|---|
![]() | Save Screenshot | 상태 차트에서 현재 표시된 부분을 이미지로 저장합니다. |
| Export Canvas to Image | 상태 차트 전체를 이미지로 저장합니다. | |
![]()
| Zoom In Zoom Out | 상태 편집기에서 전체 상태 차트를 확대하거나 축소합니다. Ctrl 키를 누른 상태에서 마우스 휠을 사용할 수도 있습니다. |
![]() | Panning | 상태 차트를 이동합니다. 이동 속도를 높이려면 Shift 키를 누르십시오. |
![]() | Fit to View | 상태 편집기에서 전체 상태 차트를 한 번에 표시합니다. |
![]() | Magnifier Tool | 상태 차트의 일부를 확대합니다. 확대경 도구를 더 빠르게 이동하려면 Alt 키를 누른 상태로 유지하십시오. |
![]() | Navigator | 상태 편집기에서 큰 상태 차트의 특정 부분을 표시합니다. 보려는 부분 위로 네비게이터 프레임을 이동하십시오. |
![]() | View Statistics | 상태 차트의 상태 및 전환 수에 대한 통계를 표시합니다. |
상태 차트에서 검색하려면 ‘ Search ’를 선택하고 ‘ Filter ’ 필드에 입력하기 시작하십시오. 검색은 전체 SCXML 트리에서 검색 조건과 일치하는 속성을 확인합니다.
상태
상태 머신이 이벤트에 반응하여 특정 상태로 진입하면, 진입한 상태가 활성 상태가 됩니다.
상태 차트는 계층적 구조를 가지므로, 다른 상태 안에 상태를 중첩하여 복합 상태를 만들 수 있습니다.
다음과 같은 유형의 상태를 생성할 수 있습니다:
| 버튼 | 이름 | 설명 |
|---|---|---|
![]() | Initial | 상태 머신이 시작될 때 진입하는 상태입니다. |
![]() | State | 기본 상태입니다. |
![]() | Parallel | 병렬로 실행되며 모두 동시에 활성 상태인 자식 상태를 가집니다. 각 자식 상태는 이벤트를 독립적으로 처리하며, 이벤트는 자식 상태마다 서로 다른 전환을 트리거할 수 있습니다. |
![]() | Final | 상태 머신을 종료합니다. 상태 머신이 최상위 최종 상태에 진입하면 완료 신호를 발산하고 정지합니다. 복합 상태 내에서 최종 상태를 생성하여 복합 상태의 내부 세부 사항을 숨길 수 있습니다. 외부에서는 해당 상태에 진입할 수만 있으며, 상태가 완료되었을 때만 알림을 받을 수 있습니다. 병렬 상태는 모든 자식 상태가 최종 상태에 도달하면 종료됩니다. |
![]() | History | 부모 상태가 마지막으로 종료되었을 때 부모 상태가 있던 자식 상태를 나타내는 의사 상태입니다. 현재 자식 상태를 기록하고자 하는 상태의 자식으로 히스토리 상태를 생성합니다. 상태 기계가 런타임에 이러한 상태의 존재를 감지하면, 부모 상태를 종료할 때 현재(실제) 자식 상태를 자동으로 기록합니다. 히스토리 상태로 이동하는 것은 사실 상태 기계가 이전에 저장해 둔 자식 상태로 이동하는 것입니다. 상태 기계는 이 전환을 실제 자식 상태로 자동으로 전달합니다. |
상태 간 전환을 생성하려면 ‘
’를 선택하십시오.
상태 추가
다음과 같은 방법으로 상태 차트에 새로운 상태를 추가할 수 있습니다.
- ' Common States ' 뷰에서 상태를 상태 편집기로 드래그합니다.
- 상태 편집기에서 상태를 선택한 다음, ‘ State ’ 도구 버튼을 선택하여 전환과 해당 대상 상태를 생성합니다.
- SCXML 편집기 내에서, 또는 SCXML 편집기와 ' Edit ' 모드 간에 상태를 복사하여 붙여넣습니다.
상태를 다른 상태 위로 드래그하여 복합 상태를 생성할 수 있습니다. 또한 자식 상태를 부모 상태에서 끌어낼 수도 있습니다. 부모 상태 내에서 자식 상태를 이동하려면 Ctrl 키를 누른 상태에서 드래그하십시오.
상태 정렬 및 편집
도구 모음 버튼을 사용하여 상태 편집기에서 상태를 정렬하고, 크기, 색상 및 글꼴을 조정하며, 기본 색상 구성표를 변경할 수 있습니다.

겹쳐진 상태는 빨간색으로 표시됩니다.
상태 트리 구조 보기
Structure (상태 편집기) 보기에서 상태 트리 구조를 펼치거나 접으려면 상태를 두 번 클릭하십시오.
상태 편집기에서 중첩된 상태의 하위 상태를 더 자세히 보려면 ‘ Zoom to State ’를 선택하십시오.
복합 상태 머신 내에서 상태 ID가 고유하도록 하려면 ‘
’(Toggle Full Namespace)를 선택합니다. 부모 상태의 이름이 두 개의 콜론(::)으로 구분되어 자식 상태의 이름에 추가됩니다. 예:
<state id="broken"> ... <state id="broken::blinking"> ... </state> <state id="broken::unblinking"> ... </state> </state>
전환 관리
전환은 상태 머신이나 외부 엔티티가 생성하는 이벤트에 대해 상태가 어떻게 반응할지를 정의합니다. 이벤트가 발생하면 상태 머신은 활성 상태에서 일치하는 전환을 확인한 후 대상 상태로 이동합니다.
선택한 상태에서 새로운 상태로 전환을 생성하려면, 대상 상태를 추가할 위치에서 마우스를 드래그한 후 놓으십시오. 다른 상태의 중앙으로 전환을 그릴 경우, 전환선은 해당 상태의 중앙을 가리키게 되지만, 상태의 가장자리로 전환을 그릴 수도 있습니다.
편집기는 전환 레이블을 중앙 정렬하지만, 사용자는 이를 다른 위치로 드래그하여 이동할 수 있습니다.
전환에 대한 조건은 대괄호([]) 안에 전환 선 아래에 표시됩니다.
전환에 모서리 점을 추가하려면 전환 선을 선택하십시오. 각 선에는 두 개의 모서리 점만 추가할 수 있습니다. 편집기는 불필요한 모서리 점을 자동으로 제거합니다. 선택한 모서리 점을 제거하려면 컨텍스트 메뉴에서 ‘ Remove Point ’를 선택하십시오.
마우스 클릭으로 새로운 변 끝점을 추가하려면 ‘
’를 선택하십시오.
선택한 전환을 제거하려면 컨텍스트 메뉴에서 ‘ Remove ’를 선택하십시오.
실행 가능한 콘텐츠 추가
상태 차트에 실행 가능한 콘텐츠를 추가하면 상태 머신이 데이터 모델을 변경하고 외부 엔티티와 상호 작용할 수 있습니다.
컨텍스트 메뉴 명령을 사용하여 ‘ <onentry> ’ 및 ‘ <onexit> ’ 요소나 전환에 실행 가능한 콘텐츠를 추가할 수 있습니다.
<raise>이벤트 발생<send>외부 엔티티와 통신하기<script>스크립트 실행<assign>데이터 모델을 변경하기 위해<cancel>작업 실행을 취소하기 위해<log>정보를 로그에 기록하기 위해<if>조건에 따라 액션을 실행하기 위해<foreach>컬렉션의 항목을 순회하며 각 항목에 대해 액션을 실행하기 위해
전환 중에 상태 머신은 현재 상태를 떠나는 상태에서 ‘ <onexit> ’ 요소에 대해 지정한 내용을 먼저 실행한 다음, 전환에 포함된 내용을 실행하고, 마지막으로 진입하는 상태의 ‘ <onentry> ’ 요소에 대한 내용을 실행합니다.
Attributes 보기에서 선택한 실행 가능한 콘텐츠에 속성을 추가할 수 있습니다.
‘상태 차트 만들기’도 참조하십시오 .
Copyright © The Qt Company Ltd. and other contributors. 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.












