【问题标题】:Is there a way to pass signal arguments through QStateMachine QState transitions?有没有办法通过 QStateMachine QState 转换传递信号参数?
【发布时间】:2020-11-05 05:05:03
【问题描述】:

例如,假设我有一些 QButtonBucket 类,其中包含一些数字 N QPushButtons,我想按下这些按钮中的任何一个来导致从某种状态转换到另一种状态.这很简单:

for button in button_bucket.get_buttons():
    state_1.addTransition(button.clicked, state_2)

但是,假设我想对导致转换的源 QPushButton 做一些事情,例如如果转换是从 state_1state_2,则更改它的颜色,或者如果转换是从state_3state_1

由于QStateMachines 的异步特性,我想在QStateMachine 逻辑的严格范围内处理这个问题。我不想在QButtonBucket 中跟踪单击了哪个按钮或任何其他有状态的数据。

如果有一种方法可以获取与addTransition 中标识的信号一起传递的参数,并在进入新状态后对它们进行操作,那将非常完美。但我没有看到一个简单的解决方案来实现它。

是否有一种众所周知的好方法可以实现我想要完成的目标?

【问题讨论】:

    标签: python pyqt qstatemachine


    【解决方案1】:

    您可以使用QState.assignProperty (self, QObject object, str name, QVariant value) 函数指示状态在进入状态时设置对象的属性。所以可以这样做:

    state_1.assignProperty(button, "enabled", false)
    

    【讨论】:

    • 这是我看过的东西,但是正如我所说,我们正在谈论多个按钮,您需要知道将样式应用于哪个按钮,并从状态机外部存储源按钮的标识打败了它的庄严。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    • 2013-08-17
    • 1970-01-01
    相关资源
    最近更新 更多