我创建了4个不同的QState,我想在每个状态转换中隐藏一个对象。
这是代码:
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);
presa
和stato
是我在程序的下一步中更改的两个bool
。现在我有一个
QGraphicsScene
,并且在场景中添加了一些QGraphicsPixmapItem
。例如,我想更新隐藏项目的场景:
if(presa==true) {object1->hide();}
我知道我必须将QState(在这种情况下从
inizio_mano
更改为aspetto_G1_primo
),并且已经添加了过渡。但是我如何隐藏该物品?
如何将QState
aspetto_G1_primo
与object1 -> hide();
连接我希望我能正确解释。
我的主要问题是:如何为每个QState分配场景的不同配置?
最佳答案
您在这里拥有QWidget
的所有属性:http://doc.qt.io/qt-5/qwidget.html#properties
每个子类也都有自己的其他属性,这些属性在文档中。
所以你可以做:
aspetto_G1_primo->assignProperty(object1, "visible", false);
然后,当进入该状态时,
object1
的属性“ visible”将设置为false
。您还可以根据状态来编辑其他任何属性,例如几何图形,样式表或标签文本...