Qt图元,场景,视图,状态机,状态转移,动画设置等的示列(备忘)
来源:互联网 发布:水弹的数据 编辑:程序博客网 时间:2024/06/01 07:44
转自:http://blog.csdn.net/sprintfwater/article/details/8734991
SpringWater(GHQ)
//定义场景
QGraphicsScene scene(-350, -350, 700, 700);//定义图元
Pixmap *item = new Pixmap(kineticPix);
item->setOffset(-kineticPix.width()/2, -kineticPix.height()/2);
//将图元加载到场景中
scene.addItem(item);
//定义顶层控件,只要将父控件定义为此控件,则当父控件加入某场景,所有孩子都随之加入
QGraphicsItem *buttonParent = new QGraphicsRectItem;
//定义状态转移触发按键
Button *ellipseButton = new Button(QPixmap(":/images/ellipse.png"), buttonParent);
Button *figure8Button = new Button(QPixmap(":/images/figure8.png"), buttonParent);
//定义按键位置属性
ellipseButton->setPos(-100, -100);
figure8Button->setPos(100, -100);
//讲父控件加入该场景
scene.addItem(buttonParent);
定义该父控件在场景中的缩比例,位置,透明度的值
buttonParent->scale(0.75,0.75);
buttonParent->setPos(200, 200);
buttonParent->setZValue(65);
//定义父亲状态,只要将父状态定义为此状态,则当父状态加入某状态机,所有孩子状态都随之加入
QState *rootState = new QState;
//定义孩子状态
QState *ellipseState = new QState(rootState);
QState *figure8State = new QState(rootState);
//为孩子状态,赋予图元,并为该图元定义位置属性,即当状态为该状态时,该图元在在场景中的位置,就变为该状态定义的位置
ellipseState->assignProperty(item, "pos", QPointF(cos((i / 63.0) * 6.28) * 250, sin((i / 63.0) * 6.28) * 250));
figure8State->assignProperty(item, "pos", QPointF(sin((i / 63.0) * 6.28) * 250, sin(((i * 2)/63.0) * 6.28) * 250));
// Ui
//场景需要视图来展现在屏幕上
View *view = new View(&scene);
view->setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Animated Tiles"));
view->setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
//定义试图的背景画刷图片
view->setBackgroundBrush(bgPix);
view->setCacheMode(QGraphicsView::CacheBackground);
view->setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
#ifdef Q_OS_SYMBIAN
view->showMaximized();
#else
view->show();
#endif
//定义状态机,将rootState加入该状态机,随之他的孩子状态都加入了该状态机。
QStateMachine states;
states.addState(rootState);
//定义状态机的初始状态为根状态
states.setInitialState(rootState);
//从随根状态进入状态机的所有状态选一个状态作为初始状态
rootState->setInitialState( figure8State);
//为图元的状态过渡变化这个动作定义一个动画属性
QParallelAnimationGroup *group = new QParallelAnimationGroup;
//为该状态的位置属性定义一个动画
QPropertyAnimation *anim = new QPropertyAnimation(item, "pos");
//设置该动作变化的持续时间
anim->setDuration(750 + i * 25);
//设置改动作的变化速度曲线
anim->setEasingCurve(QEasingCurve::InOutBack);
//讲设置好的位置变化属性添加到动画中
group->addAnimation(anim);
//获得在根状态下的按键触发状态转移映射,和该转移动作的句柄指针
QAbstractTransition *trans = rootState->addTransition(ellipseButton, SIGNAL(pressed()), ellipseState);
//讲该动作赋予前面一定定义好的动画过程
trans->addAnimation(group);
trans = rootState->addTransition(figure8Button, SIGNAL(pressed()), figure8State);
trans->addAnimation(group);
//为动画从初始设置的状态rootstate在125毫秒之后就跳转到ellipseState状态设置一个timer触发事件
QTimer timer;
timer.start(125);
//表示只触发一次,而不是循环没125触发一次
timer.setSingleShot(true);
trans = rootState->addTransition(&timer, SIGNAL(timeout()), ellipseState);
trans->addAnimation(group);
//启动状态机器
states.start();
- Qt图元,场景,视图,状态机,状态转移,动画设置等的示列(备忘)
- Qt图元,场景,视图,状态机,状态转移,动画设置等的示列(备忘)
- Qt图元,场景,视图,状态机,状态转移,动画设置等的示列
- Qt状态机场景模拟
- 基于状态机State Machine的程序设计技巧②状态转移图和简单通信协议
- QT - QTableView表格视图的列宽设置
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Unity Mecanim动画的实现(十):动画混合树、子状态机和状态行为
- Qt状态机场景模拟-续
- qt状态机和动画框架
- qt for windows 关于动画的状态机的用法
- 状态机的状态序列
- QT---设置tablewidget自适应列宽和设置自动等宽
- qt设置tablewidget自适应列宽和设置自动等宽
- qt状态机的实现
- QT状态机的使用
- 快速生成树之端口状态转移状态机
- QTableView表格视图的列宽设置
- Ubuntu12.10 64bit版编译android4.0.*版本系统相关问题
- hdu 1036 (字符串)
- 定义包含结构的内表
- php iconv() 编码转换出错 Detected an illegal character
- svn从服务器上下载代码
- Qt图元,场景,视图,状态机,状态转移,动画设置等的示列(备忘)
- Datatable的Select()方法简介
- BeanFactory和ApplicationContext
- VIJOS-P1401-复制CS
- IOS环境搭建与开发入门
- 如何配jdk的环境变量
- 由浅入深理解索引的实现
- POJ 2723 Get Luffy Out(2-SAT + 二分)
- Python字符编码详解