- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于Qt状态转换机制探究
基于Qt状态转换机制探究摘 要: 研究了跨平台类库Qt的状态转换机制。介绍了QState类和QStateMachine类,对状态机中的历史状态、复合状态、平行状态做了详解,并给出了关键代码。在软件开发中,应用Qt状态转换机制能够简化编程过程。经过实际的软件研发,结果表明,在开发交互式应用程序和动画应用程序时应用Qt状态转换机制更能提高编程效率。
关键词: Qt; QState; 状态机; 状态转换机制; 编程过程简化
中图分类号: TN919?34; TP391.9 文献标识码: A 文章编号: 1004?373X(2013)08?0121?04
0 引 言
Qt中状态机(QStateMachine)的设计来源于有限状态机的概念,主要负责程序运行过程中不同状态间切换的管理工作。有限状态机(FSM)又称为有限状态自动机或简称状态机,是表示有限个状态以及这些状态之间的转移和动作等行为的数学模型。状态存储关于过去的信息,就是说它反映从系统开始时刻到当前时刻的输入变化。转移指示状态变更,并且用满足转移发生的条件来描述它。动作是在给定时刻要进行的活动的描述。有多种类型的动作,如在进入状态时发生的进入动作;在退出状态时发生的退出动作;在特定转移时发生时的转移动作;还有输入动作,它依赖于当前状态和输入条件。
1 简 介
1.1 Qt类库
Qt是一个图形库,它实现了对X Window的封装,就如同Windows平台上MFC对Windows的封装。在Linux平台上,还有其他性质相同的图形开发工具,比较有名的有Motif, Gtk+,Openwin等。与后几种不同的是Qt还是跨平台的,它也支持Windows系列的操作系统[1]。Qt给应用程序开发者提供建立艺术级图形用户界面所需的所有功能。它完全面向对象,很容易扩展,并且允许真正的组件编程[2]。
Qt组件库有开发速度快,代码复用效率高,易于学习掌握的特点。尤其他强大的可移植性符合软件工程中软件复用技术的要求,而且其可以与Motif/Xt组件库进行混合编程,与OpenGL集成,且与C++及C都兼容[3]。
Qt于1996年进入商业领域,已成为全世界范围内数千种成功的应用程序的基础,还是Linux桌面环境KDE的基础。
Qt提取了窗口和操作系统的底层基础构造函数,为软件开发工程师提供了一致的逻辑界面,Qt API在所有支持的平台上都是相同的。事实上,这是通过对不同平台(Linux, Windows,and Mac)的专有API进行了封装,如文件处理、网络(操作,协议),进程处理、线程、数据库访问等而完成的。所以Qt应用的开发和部署与平台无关,同一套源代码,通过Qt编译可以在所有支持的平台上进行本地化运行[4]。
1.2 Qt信号和槽的机制
Qt提供了信号和槽机制来完成界面操作的响应,这一机制是完成任意2个Qt对象之间的通信机制。信号是一个特定的标识;槽是一个函数,与一般的函数不同,槽函数既能够和信号关联,也能够像普通函数一样直接调用[5]。每个Qt对象都包含若干个预定义的信号和若干个预定义的槽,当某一个特定事件发生时,一个信号被发射,与信号相关联的槽则会响应信号并完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽。
信号和槽机制是类型安全的[6],需要关联的信号和槽的签名必须是等同的,即信号的参数类型和参数个数同接收该信号的槽的参数类型和参数个数相同。不过,一个槽的参数个数是可以少于信号的参数个数的,但缺少的参数必须是信号参数的最后一个或几个参数。如果信号和槽的签名不符,编译器就会报错。
信号和槽机制是松散耦合的,减弱了Qt对象的耦合度。激发信号的Qt对象无需知道是哪个对象的哪个槽需要接收它发出的信号,它只需做的是在适当的时间发送适当的信号就可以了,而不需要知道也不关心它的信号有没有被接收到,更不需要知道是哪个对象的哪个槽接收到了信号;同样的,对象的槽也不知道是哪些信号关联到了自己,而一旦关联信号和槽,Qt就保证了适合的槽得到了调用。即使关联的对象在运行时被删除,应用程序也不会出现崩溃。
信号和槽机制增强了对象间通信的灵活性,然而这也损失了一些性能。同回调函数相比较,信号和槽机制有些慢。通常,通过传递一个信号来调用槽函数将比直接调用非虚函数慢10倍。
原因主要有:需要定位接收信号的对象;安全地遍历所有的关联(例如,一个信号关联到多个槽的情况);编组/解组传递的参数;多线程的时候,信号可能需要排队等待。
然而,与创建堆对象的new操作以及删除堆对象的delete操作相比较,信号和槽的代价只是它们很少的一部分。信号和槽机制导致的这点性能损耗,对实时应用程序是可以
您可能关注的文档
最近下载
- 生产经营单位生产安全事故应急预案编制导则GB/T29639-2020 .pptx VIP
- 唯一住房补贴申请书模板.docx VIP
- 员工花名册(自带公式).xlsx VIP
- 第三章交强险.pptx VIP
- 预防校园欺凌主题班会课件(共23张PPT).pptx VIP
- 《管理会计学》教案全套 孙茂竹 第1--12章 管理会计概论--- 管理会计报告.docx
- 顾客异议的类型.ppt VIP
- 预应力管桩试桩方案.doc VIP
- 北京宜通cl-06c六轴控制器说明书.pdf VIP
- 中职英语高教版(2025)基础模块2 Unit 1 Travel 单词课件(共61张PPT)(含音频+视频).pptx VIP
文档评论(0)