gpt4 book ai didi

python - QStateMachine:QEvent 和 Signal 的区别?

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:34 25 4
gpt4 key购买 nike

我目前正在移植 small application从 PyGTK 到位于系统托盘中的 PySide,它会定期检查服务器的更新。

当我最初写这篇文章时,我使用了一个自定义状态模型来表示它的行为:

Application state model

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

后来我发现 Qt 有 QStateMachine,它似乎非常适合这种类型的结构。但是,我无法应用 examples满意我的问题!

特别是:

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

非常感谢任何指点!

最佳答案

好的。 Pyside.QtCore.Signal 是 Signals & Slots 的衍生物。

关于你的问题

  1. 我想说在 QStateMachine 上下文中 QEventSignal 没有区别(尽管 QEvent 和 Signals & Slots是完全不同的概念)。根据您的需要,您可以使用 QEventSignal 触发转换。参见 QAbstactTransition对于开箱即用的转换列表:

    Inherited by: QSignalTransition, QEventTransition, QMouseEventTransition, QKeyEventTransition

  2. 同样,根据您的应用程序内部发生的情况,您的错误可能是来自 QObject 的信号,或者您可以发送(发布)自定义 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's之间传递数据即 UI 状态。

关于python - QStateMachine:QEvent 和 Signal 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19784875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com