이 페이지에서

SCXML 편집기

상태 차트는 시스템이 자극에 반응하는 방식을 그래픽으로 모델링하는 방법입니다. 시스템이 있을 수 있는 상태와 시스템이 한 상태에서 다른 상태로 이동하는 방법( 상태 간전환)을 정의합니다. 이벤트 기반 시스템(예: Qt 애플리케이션)의 동작은 종종 마지막 또는 현재 이벤트뿐만 아니라 이전 이벤트에 따라 달라집니다. 상태 차트를 사용하면 이러한 정보를 쉽게 공유할 수 있습니다.

Qt Creator 파일 마법사를 사용하면 상용구 코드가 포함된 상태 차트 XML(SCXML) 파일을 프로젝트에 추가할 수 있습니다. SCXML 편집기로 상태 차트를 편집하여 파일에 상태와 전환을 추가합니다. 그런 다음 Qt SCXML 모듈의 클래스를 사용하여 파일에서 생성된 상태 머신을 Qt 애플리케이션에 임베드합니다.

.scxml 파일을 열면 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.