`
ydbc
  • 浏览: 766819 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

qt状态机的实现

 
阅读更多

创建状态,设置状态中的属性,设置初始状态,设置状态装换条件、动画,启动状态机

int nMargin = 9;

int nInitWidth = m_pSelMoldForm->width();

int nInitHeight = m_pSelMoldForm->height();

int nConfEpyFormW = m_pConfEpyProForm->width();

int nConfEpyFormH = m_pConfEpyProForm->height();

//设置初始状态状态

m_pStateMachine = new QStateMachine;

QState *InitialState = new QState(m_pStateMachine);

InitialState->assignProperty(this, "size",

QSize(nInitWidth+2*nMargin, nInitHeight+2*nMargin));

InitialState->assignProperty(m_pSelMoldForm, "pos", QPoint(nMargin, nMargin));

InitialState->assignProperty(m_pConfEpyProForm, "pos", QPoint(nMargin, -nConfEpyFormH));

//设置配置空白工程状态

QState *ConfEpyState = new QState(m_pStateMachine);

ConfEpyState->assignProperty(this, "size",

QSize(nConfEpyFormW+2*nMargin, nConfEpyFormH+2*nMargin));

ConfEpyState->assignProperty(m_pSelMoldForm, "pos", QPoint(-nInitWidth, nMargin));

ConfEpyState->assignProperty(m_pConfEpyProForm, "pos", QPoint(nMargin, nMargin));

//设置状态机的出示状态

m_pStateMachine->setInitialState(InitialState);

//设置状态转换方式,由初始状态到配置空白工程的转换方式

QSignalTransition *tranInitToConfEpy =

InitialState->addTransition(m_pSelMoldForm,

SIGNAL(sg_CreateEmptyProject()),

ConfEpyState);

QSequentialAnimationGroup *pToConf_SA_Group = new QSequentialAnimationGroup;

pToConf_SA_Group->addPause(300);

pToConf_SA_Group->addAnimation(new QPropertyAnimation(this, "size"));

pToConf_SA_Group->addAnimation(new QPropertyAnimation(m_pSelMoldForm, "pos"));

pToConf_SA_Group->addAnimation(new QPropertyAnimation(m_pConfEpyProForm, "pos"));

tranInitToConfEpy->addAnimation(pToConf_SA_Group);

//设置状态转换方式,由配置空白工程到初始状态的转换方式

QSignalTransition *tranBackToInit =

ConfEpyState->addTransition(m_pConfEpyProForm,

SIGNAL(sg_OnCancle()),

InitialState);

QSequentialAnimationGroup *pBackToInit_SA_Group = new QSequentialAnimationGroup;

pBackToInit_SA_Group->addPause(300);

pBackToInit_SA_Group->addAnimation(new QPropertyAnimation(m_pConfEpyProForm, "pos"));

pBackToInit_SA_Group->addAnimation(new QPropertyAnimation(this, "size"));

pBackToInit_SA_Group->addAnimation(new QPropertyAnimation(m_pSelMoldForm, "pos"));

tranBackToInit->addAnimation(pBackToInit_SA_Group);

//启动状态机

m_pStateMachine->start();

分享到:
评论

相关推荐

    Qt状态机实现动画

    本教程将深入探讨如何利用Qt的状态机实现动画效果。 首先,让我们了解什么是Qt状态机。Qt状态机是基于Qt的QStateMachine类实现的,它允许开发者通过定义一系列的状态和转换来描述一个对象或系统的生命周期。状态机...

    qt状态机 animatedtiles.zip

    在"animatedtiles"这个示例中,我们可以推测这可能是一个使用Qt状态机实现的动画瓷砖游戏或者界面元素。在这个场景下,每个瓷砖可能有不同的状态,如“空闲”、“选中”、“活动”等,每种状态对应不同的视觉效果或...

    Qt状态机代码测试.rar

    在本文中,我们将深入探讨Qt状态机的概念,以及如何通过纯代码实现状态机的测试,特别是在处理多状态迁移和事件传递方面。Qt状态机是一种强大的工具,它允许开发者以一种结构化的方式管理对象的行为和生命周期,特别...

    Qt状态机场景模拟

    Qt状态机是一种强大的设计模式,用于管理对象的状态变化和行为。在Qt库中,它被实现为`QStateMachine`、`QState`等类,提供了一种声明式的方式来定义对象的状态转换逻辑。在这个场景模拟中,我们将深入探讨如何利用...

    Qt状态机事件处理例程!!

    让我们深入探讨Qt状态机事件处理的基本概念、工作原理以及如何创建和使用一个简单的状态机处理例程。 首先,我们要了解Qt中的QStateMachine类,它是状态机的主体,可以包含多个QState实例,每个QState代表一个特定...

    QT实现的网络收音机

    QT实现的网络收音机是一种基于QT框架的软件开发项目,它允许用户通过互联网收听各种网络电台。QT是一个跨平台的应用程序开发框架,广泛应用于Linux、Windows、Mac OS等操作系统,支持C++语言,同时也提供了QML进行...

    mystatemachine_QT_状态机_

    在本文中,我们将深入探讨如何使用QT库中的状态机框架来设计和实现一个简单的按键状态机。这个状态机有三个状态,每个状态对应于按键的不同行为。我们将从基本的QT概念开始,逐步解析代码,解释状态机的工作原理,并...

    QT-三色灯IO灯状态灯

    5. **动画效果**:使用QPropertyAnimation或QTimer配合状态机实现LED灯的动态效果。 通过对这些知识点的理解和掌握,开发者可以构建出功能丰富、视觉效果良好的QT-三色灯IO灯状态灯组件,满足各种应用场景的需求。...

    QT实现读取打印机状态

    目前针对QT打印PDF和获取打印机状态,通过几天的确认发现三个层面的获取状态 1. QT应用程序级别的获取打印机...目前只实现前两种的状态获取,第三种没有实现,需要给打印机厂家要API,同时实现QT打印图片和生成PDF文件

    QT+PLC实现FINSUDP通信

    QT+PLC实现FINSUDP通信是一个典型的工业自动化领域的技术应用,主要涉及到QT框架、FINS(Fujitsu Integrated System Network)协议以及UDP(User Datagram Protocol)网络通信。以下是相关知识点的详细介绍: 1. **...

    QT实现高仿QQ QT实现QQ界面

    9. **状态机(State Machine)**:QT提供QState和QStateMachine来实现状态机,这在处理QQ的登录、离线、在线等状态变化时非常有用。 10. **国际化与本地化(Internationalization and Localization)**:如果项目...

    Qt 应用Redis 实现消息队列

    本篇文章将详细讲解如何在Qt应用程序中利用Redis来实现一个高效的消息队列,以实现点对点的生产者-消费者模式。 首先,我们需要了解Qt和Redis的基础知识。Qt是一个跨平台的C++图形用户界面库,它提供了丰富的API...

    用qt实现了飞机大战小游戏

    此外,游戏可能使用了状态机模式来管理游戏的不同阶段(如游戏开始、游戏进行、游戏结束等)。 7. **事件驱动编程**:Qt采用事件驱动模型,游戏中的各种动作(按键、碰撞等)都会触发特定的事件,事件处理器负责...

    qt项目-飞机大战小游戏

    飞机的移动通常通过键盘事件处理实现,监听用户的上下左右键输入,改变飞机的位置。敌机则由游戏逻辑随机生成,按照预设路径或随机运动模式移动。子弹的发射和移动也是通过事件驱动的,每当玩家按下开火键,就会在...

    基于QT的雷霆战机游戏

    开发者可能使用了如Socket编程来建立客户端和服务器之间的连接,实现数据传输,保证游戏状态的实时同步。同时,服务器也可能负责处理游戏的后台逻辑,如匹配玩家、管理游戏房间等。 SQLite3作为一个轻量级的嵌入式...

    Qt5实现简易飞机大战

    游戏状态管理通常通过状态机模式实现,确保游戏在不同阶段(如游戏开始、游戏进行、游戏结束等)间切换的有序性。对象池设计可以避免频繁的对象创建和销毁,提高性能。粒子特效则可以增加游戏的视觉冲击力,而音效...

    基于Qt的飞机大战.7z

    4. **动画与定时器**:为了实现游戏的连续动作,如飞机移动、子弹发射,开发者会使用Qt的QTimer类来周期性地触发某些函数,更新游戏状态。同时,通过重绘QGraphicsView来实现动画效果。 5. **音频处理**:游戏通常...

    Qt实现电力组态软件

    【Qt实现电力组态软件】 Qt是一个跨平台的C++图形用户界面应用程序开发框架,它提供了丰富的API和工具,使得开发者能够创建出高效、美观且功能丰富的应用。在电力行业中,组态软件是一种广泛使用的系统,它允许用户...

    qt实现导航栏Demo

    总结来说,"qt实现导航栏Demo"是一个展示Qt框架下如何构建交互式、美观的导航栏的实例,它充分利用了Qt的信号与槽机制、QSS样式表、QPainter绘图功能以及良好的接口设计,实现了切换特效、选中状态反馈和自定义风格...

    基于Qt实现的模拟ATM系统

    【基于Qt实现的模拟ATM系统】是一种使用Qt框架开发的桌面应用程序,旨在模拟实际银行自动取款机(ATM)的功能。这个项目对于初学者来说是一个很好的实践平台,可以帮助他们理解和掌握Qt库的使用以及数据库操作。Qt是...

Global site tag (gtag.js) - Google Analytics