我想编写一个函数来显示我的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();
答案 0 :(得分:0)
你说问题中给出的代码在一个函数中,你希望函数启动转换以显示菜单。函数本身在一个插槽中调用。
在此函数中重新创建状态机是不正确的,函数也不一定存在。
你应该:
在小部件/对象构造函数中创建状态机,并且只执行一次。
添加QSignalTransition
以触发转换为d1
。
您还应该验证代码是否有效。只需使用ui->menuFile->show()
显示菜单,而不是在函数中使用状态机。在你尝试其他任何事情之前,这必须有效。
你说你的功能是从一个插槽调用的。显然,某个地方有一个触发该槽的信号。这是用于创建QSignalTransition
。