图形视图动画和状态机框架ppt课件.ppt
《图形视图动画和状态机框架ppt课件.ppt》由会员分享,可在线阅读,更多相关《图形视图动画和状态机框架ppt课件.ppt(34页珍藏版)》请在三一办公上搜索。
1、Qt Creator快速入门第3版,第11章 图形视图、动画和状态机框架,高级的图形和动画应用框架图形视图框架(Graphics View Framework)动画框架(Animation Framework)状态机框架(State Machine Framework),11.1 图形视图框架的结构11.2 坐标系统和事件处理11.3 图形视图框架的其他特性11.4 动画框架11.5 状态机框架,主 要 内 容,11.1 图形视图框架的结构,基本绘图绘图完成后,无法控制图形元素。图形视图框架绘图完成后,可以控制图形项的移动、检测它们的碰撞和叠加等。比喻:基本绘图像在纸上画画,画完后很难更改。图
2、形视图框架像在板子上放拼图,不满意可以随时更改。,图形视图框架主要包含三部分:图形项(QGraphicsItem):是基本的绘图单元。图形视图框架为经典的形状提供了标准的图形项,如矩形(QGraphicsRectItem)、椭圆(QGraphicsEllipseItem) 、文本项(QGraphicsTextItem)等。(世界的组成元素)场景(QGraphicsScene ):是放置图形项对象的容器。可以调用addItem()函数向场景中添加图形项,场景对图形项进行管理。(真实世界)视图(QGraphicsView):用来使场景中的内容可视化。每个视图提供一个视口。对于同一个场景,可以使用不
3、同的视图对象实现不同的可视化效果。(不同的人、动物、甚至事物看到的世界),QGraphicsRectItem:提供一个矩形itemQGraphicsEllipseItem:提供一个椭圆itemQGraphicsPolygonItem:提供一个多边形itemQGraphicsLineItem:提供一条线的itemQGraphicsPathItem:提供一个任意的路径itemQGraphicsSimpleTextItem:提供一个文字图标itemQGraphicsTextItem:提供一个文本浏览itemQGraphicsPixmapItem:提供一个图形item,标准图形项,相关函数scene.
4、addItem(item):向场景中添加已有的图形项scene.addRect():新建标准图形项(矩形),并添加到场景中。scene.itemAt(QPoint):返回指定位置处最顶层可视的图形项。scene.items():返回满足特定条件的所有图形项。view.setForegroundBrush():设置视图的前景颜色。view.setBackgroundBrush():设置视图的背景颜色。view.scale()、rotate() 等:对视图进行仿射变换。QGraphicItemGroup:一个图形项组可以包含多个图形项,一个图形项组在场景中可以当作一个图形项使用。,自定义图形项若需
5、要使用标准图形项之外的图形,可以自定义图形项。步骤:子类化QGraphicsItem类;class MyItem : public QGraphicsItem 重新实现边界矩阵函数boundingRect();重新实现绘制函数paint()。,11.2.1 坐标系统,边界矩形(bounding rectangle)图形项、场景、视图都在各自的一个矩形框中。坐标原点(默认)图形项坐标:在其边界矩形的中心。场景坐标:在其边界矩形的中心。视图坐标:在其边界矩形的左上角。坐标轴x轴从左到右;y轴由上到下;z轴由内而外(图形项的z值越大,在场景中越靠上)。,相关函数item.setPos():设置图形项
6、在场景中的位置。item.pos():返回图形项在场景(父对象)中的位置。item.setZValue():设置图形项的Z值,Z值越大越靠上。坐标映射函数,11.2.2 事件处理与传播,事件的传播视图(QEvent)场景(QGraphicsSceneEvent)图形项事件在从视图到场景的传递过程中进行了类型转换。图形视图事件的类型,图形项接收的事件类型键盘事件:默认地,图形项不接收键盘事件;使用item.setFocus()或scene.setFocusItem(item) 使图形项item获得焦点,这样item就可以接收键盘事件。鼠标悬停事件:默认地,图形项不接收鼠标悬停事件;使用item.
7、setAcceptHoverEvents()使图形项接收鼠标悬停事件。鼠标事件:默认地,图形项接收鼠标事件。,11.3.1 图形效果,图形效果(QGraphicsEffect)通过在源对象(如一个图形项)和目标设备(如视图的视口)之间挂接渲染管道和一些操作来实现改变元素外观的效果。使用item.setGraphicsEffect(effect)函数在item上实现effect效果。标准图形效果类,原图,模糊,半透明,着色,阴影,11.3.2 动画、碰撞检测和图形项组,动画的实现方法一:使用动画框架(Animation Framework)自定义的MyItem类需要继承自QGraphicsObj
8、ect类,然后使用QPropertyAnimation类来实现属性渐变动画。方法二:重新实现函数timerEvent()自定义的MyItem类继承自QObject和QGraphicsItem类,这样item就可以安装计时器,并在timerEvent()中实现累积动画。方法三:重新实现advance()函数此处介绍的方法周期性地调用Scene的advance()函数,它会进而周期性地调用item的advance()函数。,QGraphicsScene:advance()场景类QGraphicsScene的槽函数,通过调用场景中图形项的QGraphicsItem:advance()函数,将场景推进
9、一步。推进过程分为两个阶段:第一阶段:告知所有图形项,场景将要变化。传递phase=0给图形项第二阶段:告知所有图形项,它们可以移动了。传递phase=1给图形项触发方式:QObject:connect(QGraphicsItem:advance()图形项类QGraphicsItem的虚函数,对于场景中所有图形项来说,该函数被场景的槽函数调用两次。默认该函数什么也不做;若需要动画效果则需重构该函数。,碰撞检测方法一:先重新实现QGraphicsItem类的shape()函数返回图形项的准确形状,然后使用collidesWithItem()函数判断两个图形项形状之间是否有交集。shape与bou
10、ndingRect的区别:对于矩形来说,二者相同;对于其他图形来说,shape的区域小于boundingRect。方法二:直接重新实现QGraphicsItem类的collidesWithItem()函数,来提供一个自定义的图形项碰撞算法。,几个函数item.collidesWithPath(path,mode):判断item是否与path碰撞。item.collidesWithItem(item2,mode):判断item是否与item2碰撞。item.collidingItems(mode):获取与item碰撞的所有图形项的列表,返回类型为QList。modeQt:ItemSelectio
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图形 视图 动画 状态机 框架 ppt 课件
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-1967745.html