详解Qt中的状态机机制(一).docx

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
详解Qt中的状态机机制(一)*****************************************************************************欢迎访问我的博客: /u010977122/article/details***************************************************************************状态机,简写为FSM(Finite State Machine),状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。 在GUI开发的时候,界面复杂的逻辑往往令人抓狂,逻辑都不清晰,代码写起来更加费劲。用户界面设计中采用状态驱动,就可以使得GUI的逻辑更加清晰。根据当前状态的不同,显示不同的界面。程序界面可以被看作显示对应不同场景,或者是通过改变外观响应用户的交互。通常情况下,界面中很多个组件的改变是并发进行的,这样的界面可以看作从一个状态改变到另外一个状态。 今天我们来看看qt中的状态机框架,qt把它作为QtCore中的一个模块,也足见其重要性: Qt状态机框架提供了一些类来创建执行状态图,状态图为一个系统如何对外界激励进行反应提供了一个图形化模型,该模型是通过定义一些系统可能进入的状态以及系统怎样从一个状态切换到另一个状态来实现的。事件驱动的系统的一个关键特性就是它的行为不总是仅仅依赖于前一个或者当前的事件,而且也依赖于将要执行的事件。通过使用状态图,这些信息会非常容易进行表达。状态机框架提供了一套API以及一种执行模型,可以有效地将状态图的元素和语义嵌入到Qt应用程序中。该框架与Qt的元对象系统结合紧密:例如,不同状态之间的转化可由信号触发,信号驱动,且状态可配置用于QObject的属性和方法。在进入今天的主题之前,我们先来了解三个概念:状态(State):是静态的东西,对一系列对象属性的一组静态描述和配置。过渡(Transition):是一段时间或者空间的描述,状态之间切换的整个过程,或者描述的是不同属性值之间变化的一个过程。动画(Animation):是动态的一个东西,可以看作是过渡的执行者,通过在属性值上应用动画类型来创建。动画类型会对属性值进行插值,从而创建出平滑的过渡效果。要创建动画,需要为某个属性使用恰当的动画类型;应用的动画也依赖于需要实现的行为类型。这三者之间的联系较为密切,只定义了状态,它是一个死(静态)的东西,所以就需要过渡,来让它活起来。但是过渡这个过程是如何实现,就需要动画来执行,从而让过的的平滑,给用户良好的视觉效果。在Qt中,这三者之间的关系有没有那么明确,但是明确这三个概念,对于我们理解qt中的状态机制会有很大的帮助。一、状态对于初学者来说,我建议从qml中去学习了解状态机的概念会更快。它描述性的语言,会让人很快的去接受这些概念和使用。在你了解了qml中状态机的使用后,再来了解qt中的状态机就会发现很简单。今天我们就先从qml中了解一些状态机的魅力。在qml中,继承自Item的控件都会有一个states属性,该属性有用户自定义的属性组组成。可以通过PropertyChanges、ParentChange、StateChangeScript、?AnchorChanges这些控件对这个状态中的属性做定义和描述。下面是一个简单的代码示例:[javascript]?/u010977122/article/detailsiew plain?/u010977122/article/detailsopyimport?QtQuick?2.0????Rectangle?{???id:?root???width:?100;?height:?100?????states:?[???State?{???name:?red_color??PropertyChanges?{?target:?root;?color:?red?}???},???State?{???name:?blue_color??PropertyChanges?{?target:?root;?color:?blue?}???}???]??}??二、渐变在状态改变的过程中,我们可以指定一个过渡,可以采用Transition 、Behavior这两个控件,可以在这个过渡中指定各种动画,从而达到想要的交互效果。[javascript]?/u010977122/article/detailsiew plain?/u010977122/article/detailsopyimport?Qt

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档