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 ответ

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

Неправильно воссоздавать конечный автомат в этой функции, да и не обязательно, чтобы функция существовала.

Вам следует:

  1. Создайте конечный автомат в конструкторе виджета / объекта и сделайте это только один раз.

  2. Добавить QSignalTransition вызвать переход к d1,

Вы также должны убедиться, что код работает иначе. Вместо конечного автомата в вашей функции, просто покажите меню, используя ui->menuFile->show(), Это должно работать, прежде чем пытаться что-то еще.

Вы сказали, что ваша функция вызывается из слота. Очевидно, что где-то есть сигнал, который запускает этот слот. Это объект и сигнал, который вы используете для создания QSignalTransition,

Другие вопросы по тегам