Qt笔记_图像视图

图像视图框架

Qt提供了图形视图框架(Graphics View Framework)、动画框架(The Animation Framework)和状态机框架(The State Machine Framework)来实现更加高级的图形和动画应用。


图形视图框架的结构

使用QGraphicsScene场景、QGraphicsView视图、QGraphicsItem图形项替代以前版本的QCanvas类。
图形项可以处理键盘事件,鼠标的按下、移动、释放和双击事件,跟踪鼠标移动。

场景

QGraphicsScene提供了图形视图框架中的场景,功能有:

  • 提供管理大量图形项的高速接口
  • 传播事件到每一个图形项
  • 管理图形项的状态,例如选择和处理焦点
  • 提供无变换的渲染功能,用于打印
  • 场景是QGraphicsItem对象的容器

常用函数:

  • QGraphicsScene::addItem()将图形项添加到场景中;
  • QGraphicsScene::items()返回符合条件的所有图形项;
  • QGraphicsScene::itemAt()返回指定点的最上层的图形项;
  • QGraphicsScene::RemoveItem()删除一个图形项;

视图

QGraphicsView使场景中的内容可视化;是一个可滚动的区域;

图形项

QGraphicsItem主要支持功能:

  • 鼠标按下、移动、释放、双击、悬停、滚轮和右键菜单事件;
  • 键盘输入焦点和键盘事件;
  • 拖放事件;
  • 分组;
  • 碰撞检测;

坐标系统

坐标系统有3个:图形项坐标、场景坐标和视图坐标。
场景坐标对应QPainter的逻辑坐标,视图坐标对应设备坐标。
setPos()函数来指定图形项的位置,如果没有指定,则默认出现在父图形项或者场景的原点处。
场景坐标的原点在场景的中心。
视图坐标总在QGraphicsView视口的左上角。

事件处理

图形视图框架中的事件都是先由视图进行接收,然后传递给场景,再由场景传递给相应的图形项。
键盘事件:焦点、QGraphicsScene

图形效果

QGraphicsEffect类。
可以实施在任何一个图形项或者非顶层窗口的任何窗口部件上,只须先创建一个图形效果对象,然后调用setGraphicsEffect()函数来使用这个图形效果即可。停止使用可以使用setEnable(false)函数。

动画

QGraphicsScene::advance()来推动场景。配合QTimer

碰撞检测
  • 方法一:重新实现QGraphicsItem::shape()函数来返回图形项准确的形状,然后使用默认的collidesWithItem()函数通过两个图形项形状之间的交集来判断是否发生碰撞。
  • 方法二:重新实现collidesWithItem()函数来提供一个自定义的图形项碰撞算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值