QStatemachine触发信号:未调用连接的插槽

时间:2013-09-25 12:08:32

标签: qt qt4 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 个答案:

答案 0 :(得分:0)

你说问题中给出的代码在一个函数中,你希望函数启动转换以显示菜单。函数本身在一个插槽中调用。

在此函数中重新创建状态机是不正确的,函数也不一定存在。

你应该:

  1. 在小部件/对象构造函数中创建状态机,并且只执行一次。

  2. 添加QSignalTransition以触发转换为d1

  3. 您还应该验证代码是否有效。只需使用ui->menuFile->show()显示菜单,而不是在函数中使用状态机。在你尝试其他任何事情之前,这必须有效。

    你说你的功能是从一个插槽调用的。显然,某个地方有一个触发该槽的信号。这是用于创建QSignalTransition

    的对象和信号