其他分享
首页 > 其他分享> > QStateMachine:QEvent和信号之间的区别?

QStateMachine:QEvent和信号之间的区别?

作者:互联网

我目前正在将small application从PyGTK移植到位于系统托盘中的PySide上,并定期检查服务器是否有更新.

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

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

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

尤其是:

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

非常感谢任何指针!

解决方法:

好. Pyside.QtCore.Signal是Signals&插槽导数.

至于你的问题

>我要说的是,在QStateMachine的上下文中,QEvent和Signal并没有区别(尽管QEvent和Signals& Slot是完全不同的概念).根据您的需要,您可以使用QEvent或Signal触发转换.开箱即用的转换列表,请参见QAbstactTransition

Inherited by: QSignalTransition, QEventTransition,
QMouseEventTransition, QKeyEventTransition

>同样,根据您的应用程序内部发生的情况,您的错误可能是来自QObject的信号,也可能是发送(发布)自定义QEvent.您将需要实现自定义QEvent和/或自定义QEventTransition,以仅在事件上触发转换.
>这又取决于:)过渡是胶水.它具有有关源和目标状态的知识.因此,我只将准备代码放在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‘s(即UI状态)之间传递数据.

标签:pyside,qstatemachine,python,qt
来源: https://codeday.me/bug/20191030/1966350.html