首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QStateMachine: QEvent和信号的区别?

QStateMachine: QEvent和信号的区别?
EN

Stack Overflow用户
提问于 2013-11-05 08:48:59
回答 1查看 954关注 0票数 3

我目前正在将小应用从PyGTK移植到PySide,它位于您的系统中,并定期检查服务器的更新。

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

  • 初始状态
  • 检查:检查服务器的更新
  • 断开连接:没有与服务器的连接(等待一段时间再试)
  • 错误:服务器报告了错误(用户需要在继续之前检查设置)
  • 空闲:在再次检查之前等待轮询间隔秒。
  • 退出

此后,我发现Qt具有QStateMachine,这似乎非常适合这种类型的结构。然而,我无法满意地将示例应用于我的问题!

特别是:

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

任何指点都是非常感谢的!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-09 21:04:09

好的。Pyside.QtCore.Signal是信号和槽的导数。

至于你的问题

  1. 我想说,QEventSignal在QStateMachine的上下文中没有什么区别(尽管QEvent和信号和时隙是完全不同的概念)。根据您的需要,您可以使用QEventSignal触发转换。有关开箱即用的转换列表,请参见QAbstactTransition: 继承: QSignalTransition,QEventTransition,QMouseEventTransition,QKeyEventTransition
  2. 同样,根据应用程序内部发生的情况,您的错误可能是来自QObject的信号,或者您可以发送(post)自定义QEvent。您需要实现您的自定义QEvent和/或自定义QEventTransition,以便只对您的事件触发转换。
  3. 这同样取决于:)转换是胶水。它了解源和目的地的状态。因此,我只将预备代码放在onTransition()中,状态初始化代码放在onEnter()中。对我来说,在onTransition()中放置更改状态的代码似乎也是错误的,例如,您已经展示了: def onTransition(self,e):x= e.arguments() fac = self.fact.fac self.fact.fac =x* fac self.fact.x =x-1 但正如你所见,效果很好。

NB:,如果你有iOS经验,那么UIStoryboardSegue是过渡的模拟。主要用于在罗氏之间传递数据,即UI状态。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19784875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档