QStateMachine是如何工作的

时间:2016-06-06 19:13:11

标签: c++ qt qstatemachine

我创建了4个不同的QState,我希望在evry状态转换中隐藏一个对象。

这是代码:

QStateMachine partita;

QState *inizio_mano = new QState();
QState *aspetto_G1_primo = new QState();
QState *aspetto_G1_secondo = new QState();
QFinalState *fine_mano = new QFinalState();

partita.setInitialState(inizio_mano);

inizio_mano -> addTransition(this,presa==true,aspetto_G1_primo);
inizio_mano -> addTransition(this,presa==false,aspetto_G1_secondo);
aspetto_G1_primo -> addTransition(this,stato==true,fine_mano);
aspetto_G1_secondo -> addTransition(this,stato==true,fine_mano);

presastato是两个bool我在下一步计划中进行了更改。

现在我有一个QGraphicsScene,并且在场景中我添加了一些QGraphicsPixmapItem

例如,我想更新隐藏项目的场景:

if(presa==true) {object1->hide();} 

我知道我必须更改QState(在这种情况下从inizio_mano更改为aspetto_G1_primo),并且我已经完成了添加转换。

但我怎么能隐藏那个项目?

如何将QState aspetto_G1_primoobject1 -> hide();

相关联

我希望我能正确解释。

我的主要问题是:如何为每个QState分配不同的场景配置?

1 个答案:

答案 0 :(得分:1)

您拥有QWidget的所有属性:http://doc.qt.io/qt-5/qwidget.html#properties

每个子类还有自己的附加属性,这些属性位于doc。

所以你可以这样做:

aspetto_G1_primo->assignProperty(object1, "visible", false);

然后,当进入该状态时,object1的“可见”属性将设置为false

您也可以根据状态编辑任何其他属性,例如几何图形,样式表或标签文本......