Я пытаюсь создать систему, которая организована основным автоматом и имеет разные машины подсетей для выполняемых задач. Будучи долговременным пользователем Qt, я рассмотрел новую реализацию SCXML в Qt 5.8. Однако я не могу понять, как использовать API, предоставляемый с 5.8, для правильного использования подчиненных машин.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