QStateMachine:QEvent和Signal之间的区别?

塞巴斯蒂安

我目前正在将一个小型应用程序从PyGTK移植到位于系统托盘中的PySide,并定期检查服务器是否有更新。

最初编写此代码时,我使用了一个自定义状态模型来表示其行为:

应用状态模型

  • 初始化:初始状态
  • 检查:检查服务器是否有更新
  • 断开连接:与服务器无连接(等待一段时间再试一次)
  • 错误:服务器报告了错误(用户需要检查设置才能继续)
  • 空闲:等待POLLING INTERVAL秒,然后再次检查
  • 退出

从那以后,我发现Qt具有QStateMachine,它对于这种类型的结构似乎很完美。但是,我无法令人满意地示例应用于我的问题!

特别是:

  1. 在QStateMachine的上下文中,Signal和QEvent有什么区别?
  2. 如何定义条件转换,即出现错误时转到...?
  3. 程序逻辑应该在Transition.onTransition()还是QState.onEnter()中发生?

非常感谢任何指针!

行。Pyside.QtCore.Signal是信号和插槽导数。

至于你的问题

  1. 我想说存在没有差别QEventSignal在QStateMachine的情况下(虽然QEvent和信号和槽是完全不同的概念)。根据您的需要,您可以使用QEvent触发转换Signal请参阅QAbstactTransition以获取开箱即用的转换列表:

    继承者:QSignalTransition,QEventTransition,QMouseEventTransition,QKeyEventTransition

  2. 同样,根据您的应用程序内部发生的情况,您的错误可能是发出信号QObject或您可以发送(发布)custom QEvent你需要实现自定义的QEvent和/或定制QEventTransition只在触发转换事件。

  3. 这又取决于:)过渡是胶水。它具有有关源和目标状态的知识。因此,我只将准备代码放在其中onTransition(),将状态初始化代码放在其中onEnter()同样,将更改状态的代码放入内部似乎对我来说是错误的onTransition(),如您所展示的示例:

    def onTransition(self, e):
        x = e.arguments()[0]
        fac = self.fact.fac
        self.fact.fac = x * fac
        self.fact.x = x - 1
    

    但正如您所见,它运作良好。

注意:如果您有iOS经验,则UIStoryboardSegue可以进行过渡。主要用于在UIView即UI状态之间传递数据

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章