c++ - QStateMachine 它是如何工作的

标签 c++ qt qstatemachine

我创建了 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);

presastato 是两个bool 我在下一步程序中改变。

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

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

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

我知道我必须更改 QState(在本例中从 inizio_mano 更改为 aspetto_G1_primo),并且我已经添加了一个转换。

但是我怎样才能隐藏那个 Item 呢?

如何连接 QState aspetto_G1_primoobject1 -> hide();

希望我解释正确。

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

最佳答案

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

每个子类也有自己的附加属性,这些都在文档中。

所以你可以这样做:

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

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

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

关于c++ - QStateMachine 它是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37665170/

相关文章:

c++ - 将自定义程序部署到托管服务

c++ - 在没有系统和硬盘缓存的情况下写入文件

c++ - 通过排队的 Qt 信号槽连接发送 QSharedPointers 的 QVector

android - 如何使用 Android 和 QT Creator 的 RTL SDR 库?

qt - 如何在 Qt 的状态机中实现选择?

c++ - 如何让这个 Qt 状态机工作?

c++ - 以类为模板的类成员变量

c++以对数方式增加for循环增量

c++ - QComboBox 不调用委托(delegate)方法

c++ - 如果 QStateMachine 中的转换成功,则从类发出信号