QStateMachine 它是如何工作的
Posted
技术标签:
【中文标题】QStateMachine 它是如何工作的【英文标题】:QStateMachine how it works 【发布时间】:2016-06-06 19:13:10 【问题描述】:我创建了 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 分配不同的场景配置?
【问题讨论】:
您写的addTransition
语句无效。 仅可以通过信号发射或接收事件触发转换。请修复您的代码以使其首先编译。
【参考方案1】:
您拥有QWidget
的所有属性:http://doc.qt.io/qt-5/qwidget.html#properties
每个子类也有自己的附加属性,在文档中。
所以你可以这样做:
aspetto_G1_primo->assignProperty(object1, "visible", false);
然后,当进入该状态时,object1
的“可见”属性将设置为 false
。
您也可以根据状态编辑任何其他属性,例如几何、样式表或标签文本...
【讨论】:
以上是关于QStateMachine 它是如何工作的的主要内容,如果未能解决你的问题,请参考以下文章
QStateMachine 如何在不同的 QState 中显示和隐藏 QGraphicsView 和 QObject