Python QStateMachine:QEvent和Signal之间的差异?
我目前正在将一个从PyGTK移植到PySide,它位于您的systray中,并定期检查服务器的更新 当我最初写这篇文章时,我使用自定义状态模型来表示其行为:Python QStateMachine:QEvent和Signal之间的差异?,python,qt,pyside,qstatemachine,Python,Qt,Pyside,Qstatemachine,我目前正在将一个从PyGTK移植到PySide,它位于您的systray中,并定期检查服务器的更新 当我最初写这篇文章时,我使用自定义状态模型来表示其行为: 初始状态 检查:检查服务器是否有更新 已断开连接:与服务器没有连接(请等待一段时间重试) 错误:服务器报告错误(用户需要在继续之前检查设置) 空闲:等待轮询间隔秒,然后再次检查 退出 后来我发现Qt有QStateMachine,它似乎非常适合这种类型的结构。然而,我没能满意地将这些应用到我的问题上 特别是: 在QStateMachin
- 初始状态
- 检查:检查服务器是否有更新
- 已断开连接:与服务器没有连接(请等待一段时间重试)
- 错误:服务器报告错误(用户需要在继续之前检查设置)
- 空闲:等待轮询间隔秒,然后再次检查
- 退出
非常感谢任何指点 好的
Pyside.QtCore.Signal
是信号和插槽的派生
至于你的问题
QEvent
和Signal
没有区别(尽管QEvent
和Signals&slot是完全不同的概念)。根据您的需要,您可以使用QEvent
或Signal
触发转换。有关开箱即用转换的列表,请参见:
继承人:QSignalTransition、QEventTransition、,
QMouseEventTransition,QKeyEventTransition
QObject
的信号,也可能是您可以发送(post)自定义的信号。您需要实现自定义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
但正如你所看到的,它工作得很好
NB:如果您有iOS经验,则可以模拟过渡。主要用于在UI状态之间传递数据。您在说什么信号:或者?@twi:我在说Pyside.QtCore.Signal(如中所用)