Я реализовал машину с тремя состояниями и объявил функцию, которая изменяет текущее состояние машины:
void changeState (s1);
которая содержит следующую команду для изменения состояния машины:
S0-> addTransition (s1)
Когда я его компилирую, ошибка не появляется, но когда я запускаю приложение, появляется следующее сообщение:
QObject :: setParent: невозможно установить родителя, новый родитель находится в другом потоке
Должен ли я обязательно подключить сигнал к сигналу?
Большое спасибо за вашу помощь.
Лука
С тем, что вы объяснили, я бы сказал, что проблема не в самом соединении. QT не допускает, чтобы родитель / потомок находились в другом потоке. Это означает, что весь конечный автомат должен работать в одном потоке.
Чтобы запустить его в потоке, отличном от основного, вам нужно создать свой QStatemachine без родителя, добавить все состояния и затем переместить его в другой поток, используя QObject :: moveToThread.
Вы также можете полностью создать свой конечный автомат из другого потока, хотя я никогда этого не делал. Создание элемента в основном — более прямолинейная реализация. Затем вы можете переместить их, как вы хотите.
И да, вы можете добавить переход без сигналов. В этом случае состояние просто должно быть активировано другими средствами, путем переопределения QAbstractTransition.
Других решений пока нет …