QStatemachine для запуска сигнала: подключенные слоты не называются
Я хочу закодировать функцию, чтобы показать основной поток моего GUI, например, если я вызываю эту функцию в слоте, она запускает переходы в состояниях как FileMenu->Open(сигнал срабатывает и активирует слот, подключенный к нему) и так далее. Я пробовал с конечным автоматом как:
d1->assignProperty(ui->menuFile,"visible",true);
d0->addTransition(d1);
d1->addTransition(ui->actionOpen,SIGNAL(triggered()),d0);
dem->addState(d0);
dem->addState(d1);
dem->setInitialState(d0);
dem->start();
Файловое меню не появляется на месте. Также сигнал не срабатывает при переходе между состояниями. Я новичок в QStateMachine
, Я не уверен, что запуск сигнала таким образом возможен или нет. Если да, то и что не так в моем коде или есть ли лучший способ сделать это?
Редактировать: коррекция меню файла:
QRect r0 = this->geometry();
QRect tbar = ui->menuBar->geometry();
QRect r = ui->menuFile->geometry();
r.setCoords(r0.x(),r0.y()+tbar.height(),r0.x()+r.width(),r0.y()+r.height()+tbar.height());
ui->menuFile->setGeometry(r);
ui->menuFile->show();
1 ответ
Вы говорите, что код, приведенный в вопросе, находится внутри функции, и вы хотите, чтобы функция запускала переходы, чтобы показать меню. Сама функция вызывается в слоте.
Неправильно воссоздавать конечный автомат в этой функции, да и не обязательно, чтобы функция существовала.
Вам следует:
Создайте конечный автомат в конструкторе виджета / объекта и сделайте это только один раз.
Добавить
QSignalTransition
вызвать переход кd1
,
Вы также должны убедиться, что код работает иначе. Вместо конечного автомата в вашей функции, просто покажите меню, используя ui->menuFile->show()
, Это должно работать, прежде чем пытаться что-то еще.
Вы сказали, что ваша функция вызывается из слота. Очевидно, что где-то есть сигнал, который запускает этот слот. Это объект и сигнал, который вы используете для создания QSignalTransition
,