Добавить переход без отправителя и получателя Qt 5.2

Я реализовал машину с тремя состояниями и объявил функцию, которая изменяет текущее состояние машины:
void changeState (s1);
которая содержит следующую команду для изменения состояния машины:
S0-> addTransition (s1)
Когда я его компилирую, ошибка не появляется, но когда я запускаю приложение, появляется следующее сообщение:

QObject :: setParent: невозможно установить родителя, новый родитель находится в другом потоке

Должен ли я обязательно подключить сигнал к сигналу?

Большое спасибо за вашу помощь.

Лука

0

Решение

С тем, что вы объяснили, я бы сказал, что проблема не в самом соединении. QT не допускает, чтобы родитель / потомок находились в другом потоке. Это означает, что весь конечный автомат должен работать в одном потоке.

Чтобы запустить его в потоке, отличном от основного, вам нужно создать свой QStatemachine без родителя, добавить все состояния и затем переместить его в другой поток, используя QObject :: moveToThread.

Вы также можете полностью создать свой конечный автомат из другого потока, хотя я никогда этого не делал. Создание элемента в основном — более прямолинейная реализация. Затем вы можете переместить их, как вы хотите.

И да, вы можете добавить переход без сигналов. В этом случае состояние просто должно быть активировано другими средствами, путем переопределения QAbstractTransition.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]