주 상태 시스템에 의해 조정되고 실행중인 작업에 대해 다른 하위 상태 시스템이있는 시스템을 구축하려고합니다. 오랫동안 Qt를 사용해 왔던 Qt 5.8에서 새로운 SCXML 구현을 살펴 보았습니다. 그러나 하위 상태 머신을 제대로 구현하기 위해 5.8과 함께 제공된 API를 사용하는 방법을 알 수는 없습니다.Qt 5.8 하위 상태 머신에서 SCXML 프레임 워크를 사용하는 방법은 무엇입니까?
제 아이디어는 주 상태 시스템을 사용하고 주 상태 시스템의 상태에서 특정 하위 상태 시스템을 호출하는 것입니다. 하위 상태 머신을 호출하는 동안 최상위 상태 머신 오브젝트가 invokedServicesChanged(..)
을 방출 한 후 액세스하는 방법을 알아 내지 못했습니다. 관련 컴퓨터에 대해서가 아니라 QScxmlInvokableService
에 대한 포인터에 액세스 할 수 있습니다.
또한 최상위 상태 컴퓨터 개체는 상태 및 이벤트를 맨 위에서 만 노출하고 호출 된 상태 컴퓨터에서는 노출하지 않습니다. 예를 들어 topLevelStateMachine->activeStateNames()
은 최상위 상태 만 나열합니다.
Qt의 소스 코드를 보면 QScxmlInvokableService
이 실제로 관련 상태 머신에 대한 포인터를 포함하고있는 QScxmlScxmlService
의 기본 클래스라는 것을 알았습니다. 불행히도 QScxmlScxmlService
은 qscxmlinvokableservice_p.h
에 정의되어 있으며, 이름에 _p
이 표시되어 있으므로 비공개입니다. 그렇다면 공용 SCXML API를 어떻게 사용해야합니까? 내가 놓친 게 있니? IIRC SCXML 지원은 5.7의 기술적 미리보기 였지만 이제는 정규 분포의 일부로 5.8에 포함됩니다.
저는 이것이 API의 감독이라고 말하고 싶습니다. 자유롭게'QT + = scxml_private'를 프로젝트에 추가하고 구현 세부 사항을 사용하여 필요한 작업을 수행하십시오. 그 Qt 모듈은 꽤 새롭고 예, 유용한 것으로 만들기 위해 필요한 비트가 부족합니다. –
"하위 상태 머신"이라고 할 때'.scxml' 상태 머신을 분리하거나 [복합 상태] (https://www.w3.org/TR/scxml/#N10192)를 말하고 있습니까? 전자의 경우 왜 후자가 아닌가? – Phrogz
상태 머신이 분리되어 있습니다. 하나의 XML 파일에 대형 스테이트 머신을 가지는 것이 좋은 생각은 아니지만 이론 상으로는 복합 상태로 해결할 수 있다고 생각합니다. SCXML과 Qt를 사용하여 많은 하위 상태가있는 대형 상태 차트를 구성하는 방법은 무엇입니까? – Nils