掌桥专利:专业的专利平台
掌桥专利
首页

一种基于状态机的动态开关按钮软件实现方法

文献发布时间:2023-06-19 10:48:02


一种基于状态机的动态开关按钮软件实现方法

技术领域

本发明属于人机交互技术领域,尤其是一种基于状态机的动态开关按钮软件实现方法。

背景技术

人机界面是指人和机器在信息交换和功能上接触或互相影响的领域或称界面所说人机结合面,信息交换,功能接触或互相影响,指人和机器的硬接触和软触,此结合面不仅包括点线面的直接接触,还包括远距离的信息传递与控制的作用空间。人机结合面是人机系统中的中心一环节,主要由安全工程学的分支学科安全人机工程学去研究和提出解决的依据,并过安全工程设备工程学,安全管理工程学以及安全系统工程学去研究具体的解决方法手段措施安全人机学。它实现信息的内部形式与人类可以接受形式之间的转换。凡参与人机信息交流的领域都存在着人机界面。大量运用在工业与商业上,简单的区分为“输入”(Input)与“输出”(Output)两种,输入指的是由人来进行机械或设备的操作,如把手、开关、门、指令(命令)的下达或保养维护等,而输出指的是由机械或设备发出来的通知,如故障、警告、操作说明提示等,好的人机接口会帮助使用者更简单、更正确、更迅速的操作机械,也能使机械发挥最大的效能并延长使用寿命,而市面上所指的人机接口则多界狭义的指在软件人性化的操作接口上。

在人机交互界面的软件设计中,按钮是最为常见的软件控件,而传统软件图形界面开发工具往往只提供了普通按钮的按下、点击、选中等静态状态,未对按钮的动态开关效果进行封装和设计。随着人们对人机交互的友好性需求日益提升,动态开关按钮已成为一种支持开、关两种状态,且交互友好、易于人们接受的软件控件。

发明内容

本发明的目的在于克服现有技术的不足,提出一种基于状态机的动态开关按钮软件实现方法,能够达到动态开关按钮状态切换过度直观、平稳和人机交互更友好的目的。

本发明解决其技术问题是采取以下技术方案实现的:

一种基于状态机的动态开关按钮软件实现方法,包括以下步骤:

步骤1、创建动态开关按钮类CustomButton;

步骤2、通过调用函数设置控件布局;

步骤3、通过new动态申请内存,创建状态机;

步骤4、状态显示设计;

步骤5、状态信号设计。

而且,所述步骤1中创建的动态开关按钮类CustomButton,继承自QGraphicsView图形视图类。

而且,所述步骤2包括以下步骤:

步骤2.1、在CustomButton类的构造函数中,通过new动态申请内存,创建按钮QPushButton对象,通过调用setFocusPolicy设置按钮对象的焦点状态为没有焦点;通过调用setFlat设置按钮对象边框为扁平,通过调用setFixedSize设置按钮对象大小;

步骤2.2、通过new动态申请内存,创建场景QGraphicsScene对象,通过调用setScene设置视图的场景;

步骤2.3、通过调用setRenderHint设置视图反锯齿属性为QPainter::Antialiasing,通过调用setAutoFillBackground设置背景自动填充为true;

步骤2.4、通过调用setHorizontalScrollBarPolicy设置视图的水平滚动条为关闭Qt::ScrollBarAlwaysOff状态;

步骤2.5、关通过调用setVerticalScrollBarPolicy设置视图的垂直滚动条为关闭Qt::ScrollBarAlwaysOff状态;

步骤2.6、通过调用setSceneRect设置scene的大小,将View置于scene的中心;

步骤2.7、通过调用addWidget将按钮加入场景中;

步骤2.8、判断初始状态是否为“on”,若初始状态是为“on”,则设置按钮在场景中的位置右对齐并结束设置,否则设置按钮在场景中的位置左对齐并结束设置。

而且,所述步骤3包括以下步骤:

步骤3.1、通过new动态申请内存,创建状态机QStateMachine对象;

步骤3.2、通过new动态申请内存,分别创建QState对象“onSt”和“offSt”;

步骤3.3、通过调用setInitialState设置状态机QStateMachine对象的初始状态;

步骤3.4、通过调用assignProperty设置状态“onSt”的state自定义属性为“on”,设置状态“offSt””的state自定义属性为“off”;

步骤3.5、通过new动态申请内存,创建状态切换产生的信号toOffSignal和toOnSignal,当按钮在onSt状态下被按下时切换至offSt状态,当按钮在offSt状态下被按下时切换至onSt状态;

步骤3.6、通过new动态申请内存,创建向“onSt”状态转换的动画toOnAnimation,设置动画的属性为pos,通过调用setDuration设置动画切换时间,通过调用setEasingCurve设置动画显示效果,通过调用setKeyValueAt设置不同时间段属性pos的值;

步骤3.7、通过new动态申请内存,创建向“offSt”状态转换的动画toOffAnimation,设置动画的属性为pos,通过调用setDuration设置动画切换时间,通过调用setEasingCurve设置动画显示效果,通过调用setKeyValueAt设置不同时间段属性pos的值;

步骤3.8、通过调用addAnimation向状态机对象添加动画toOnAnimation和toOffAnimation;

步骤3.9、启动状态机并结束设置。

而且,所述步骤4包括以下步骤:

步骤4.1、关联onSt状态的propertiesAssigned信号到槽函数updateStyleSheet,用于背景图片设置;

步骤4.2、关联offSt状态的propertiesAssigned信号到槽函数updateStyleSheet,用于背景图片设置。

而且,所述步骤5包括以下步骤:

步骤5.1、关联向onSt状态转换完成propertiesAssigned信号到开状态接触发信号onClicked;

步骤5.2、关联向offSt状态转换完成propertiesAssigned信号到关状态接触发信号offClicked。

本发明的优点和积极效果是:

本发明通过创建动态开关按钮类CustomButton;通过调用函数设置控件布局;通过new动态申请内存,创建状态机;设计状态显示以及状态信号;实现了满足动态开关按钮的封装需求的一种动态开关按钮的软件设计方法。通过动态开关按钮采用Qt类的形式进行封装和设计,提供按钮on/off两种工作状态,状态的创建和属性通过状态机进行管理,当每种状态发生时,该类向外部发出状态发生信号,以通知按钮的状态变化。在动态开关按钮进行状态切换时,本发明通过加入动画的方式实现动态滑动效果。以达到状态切换过度直观、平稳、人机交互更友好的目的。

附图说明

图1是本发明的控件布局设计流程图;

图2是本发明的控件布局效果图;

图3是本发明的状态机状态转换图;

图4是本发明的状态机设计流程图;

图5是本发明的状态显示设计流程图;

图6是本发明的状态信号设计流程图。

具体实施方式

以下结合附图对本发明做进一步详述。

一种基于状态机的动态开关按钮软件实现方法,如图1所示,包括以下步骤:

步骤1、创建动态开关按钮类CustomButton,作为主对象,CustomButton继承自QGraphicsView图形视图类。

步骤2、通过调用函数设置控件布局。如图2所示,本步骤包括以下步骤:

步骤2.1、在CustomButton类的构造函数中,通过new动态申请内存,创建按钮QPushButton对象,通过调用setFocusPolicy设置按钮对象的焦点状态为没有焦点;通过调用setFlat设置按钮对象边框为扁平,通过调用setFixedSize设置按钮对象大小;

步骤2.2、通过new动态申请内存,创建场景QGraphicsScene对象,通过调用setScene设置视图的场景;

步骤2.3、通过调用setRenderHint设置视图反锯齿属性为QPainter::Antialiasing,通过调用setAutoFillBackground设置背景自动填充为true;

步骤2.4、通过调用setHorizontalScrollBarPolicy设置视图的水平滚动条为关闭Qt::ScrollBarAlwaysOff状态;

步骤2.5、关通过调用setVerticalScrollBarPolicy设置视图的垂直滚动条为关闭Qt::ScrollBarAlwaysOff状态;

步骤2.6、通过调用setSceneRect设置scene的大小,将View置于scene的中心;

步骤2.7、通过调用addWidget将按钮加入场景中;

步骤2.8、判断初始状态是否为“on”,若初始状态是为“on”,则设置按钮在场景中的位置右对齐并结束设置,否则设置按钮在场景中的位置左对齐并结束设置。

如图2所示,为控件布局效果效果图。

步骤3、通过new动态申请内存,创建状态机。状态机设计的状态图转换图如图3所示。状态机创建后的初始状态依据封装类在构造函数中传入的参数而定,若传入的初始状态为on,则状态机初始状态为on,否则为off。状态机在on状态下,若用户单击按钮,则状态机转换为off状态;状态机在off状态下,若用户点击按钮,则状态机转换为on状态。

如图4所示,本步骤包括以下步骤:

步骤3.1、通过new动态申请内存,创建状态机QStateMachine对象;

步骤3.2、通过new动态申请内存,分别创建QState对象“onSt”和“offSt”;

步骤3.3、通过调用setInitialState设置状态机QStateMachine对象的初始状态;

步骤3.4、通过调用assignProperty设置状态“onSt”的state自定义属性为“on”,设置状态“offSt””的state自定义属性为“off”;

步骤3.5、通过new动态申请内存,创建状态切换产生的信号toOffSignal和toOnSignal,当按钮在onSt状态下被按下时切换至offSt状态,当按钮在offSt状态下被按下时切换至onSt状态;

步骤3.6、通过new动态申请内存,创建向“onSt”状态转换的动画toOnAnimation,设置动画的属性为pos,通过调用setDuration设置动画切换时间,通过调用setEasingCurve设置动画显示效果,通过调用setKeyValueAt设置不同时间段属性pos的值;

步骤3.7、通过new动态申请内存,创建向“offSt”状态转换的动画toOffAnimation,设置动画的属性为pos,通过调用setDuration设置动画切换时间,通过调用setEasingCurve设置动画显示效果,通过调用setKeyValueAt设置不同时间段属性pos的值;

步骤3.8、通过调用addAnimation向状态机对象添加动画toOnAnimation和toOffAnimation;

步骤3.9、启动状态机并结束设置。

如图5所示为动画效果实现流程图,创建向on状态转换的动画,并设置动画的变换方式和属性,动画变换方式为QEasingCurve::OutQuart,动画属性为按钮位置;其次,设置动画的持续时间为300ms;最后,设置动画发生前后按钮的起始位置和终点位置,当状态由on向off变换时,按钮位置起始位置为最右侧,终点位置为最左侧;当状态由off向on变换时,按钮位置起始位置为最左侧,终点位置为最右侧。

步骤4、状态显示设计。在状态转换过程中,完成动画设置的终点属性值时,应根据切换后的状态设置背景图片。该功能通过关联状态属性设置结束信号到槽函数实现。在槽函数中实现图片的切换。本步骤包括以下步骤:

步骤4.1、关联onSt状态的propertiesAssigned信号到槽函数updateStyleSheet,用于背景图片设置;

步骤4.2、关联offSt状态的propertiesAssigned信号到槽函数updateStyleSheet,用于背景图片设置。

步骤5、状态信号设计。为提升封装类的易用性和封装性、使封装类能够对外提供动态开关按钮的状态触发接口,应将状态发生转换时,向外部发出状态“开”触发信号和状态“关”触发信号。如图6所示,本步骤包括以下步骤:

步骤5.1、关联向onSt状态转换完成propertiesAssigned信号到开状态接触发信号onClicked;

步骤5.2、关联向offSt状态转换完成propertiesAssigned信号到关状态接触发信号offClicked。

通过上述一种基于状态机的动态开关按钮软件实现方法,在CentOS系统中,以QtCreator为开发环境使用QStateMachine和QPushButton进行了软件仿真,成功实现了一种基于状态机的动态开关按钮的软件实现方法,通过在图形界面应用软件中创建动态开关按钮,关联其对外提供的状态触发函数,不用重复设计,即实现了动态开关效果,同时提升了应用软件的易用性和人机交互的友好性。

需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明包括并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的技术方案得出的其他实施方式,同样属于本发明保护的范围。

相关技术
  • 一种基于状态机的动态开关按钮软件实现方法
  • 一种基于有限状态机实现的多周期非流水线CPU动态调试方法
技术分类

06120112686258