没有合适的资源?快使用搜索试试~ 我知道了~
首页Qt QGraphics View架构
Qt QGraphics View架构
4星 · 超过85%的资源 需积分: 49 77 下载量 162 浏览量
更新于2023-03-16
评论 3
收藏 179KB DOCX 举报
详细明了的介绍了QGraphics View的结构,并分别介绍了QGraphicsScene,QGraphicsView,QGraphicsItem ,介绍的很好,值得一看
资源详情
资源评论
资源推荐
QGraphics View 框架
提供了一个界面,它既可以管理大数量的定制 ,又可与它们交互,有一
个 可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在
中的这些 它具有双精度的交互能力。 能处理键盘事件,鼠标的按,移动、释放、双击事件,
也可以跟踪鼠标移动。 使用 树来提供对 的快速查找,使用这种技术,它可以实时地
绘制大规模场景,甚至以百万 计。 在 中被引用,它替代了它的前辈 。
Graphics View
的体系结构
提供的是一种类似于 的编程。多个 可以监视同一个场景,而场景包含
多个具有多种几何外形的 。
场景
表示 中的场景,它有以下职责:
为管理大量的 提供一个快速的接口。
传播事件到每个 。
管理 的状态,例如选择,焦点处理。
提供未经变换的渲染功能,主要用于打印。
场景作为 对象的容器。通过调用 !!"#把这些 加入到场景中。
可以使用众多的查找函数来获取特定的 。!"#与它的许多重载函数可获取那些与
点、矩形,多边形,向量路径等相交或是有包含有关系的 。!!$"#返回特定上最
顶端的 。所有的 查找函数都以出栈序列返回(也就是说,第一个返回的是最顶端的,最后一个返回
的是最底端的)。
%
&'(&"&)"**+**+**##%
'($",*,*#%
--((%
的事件传播结构会把场景事件投递到 ,也管理多个 之间的传递。假如场景收到
了鼠标在某个位置 事件,场景会把这个事件投递给处在那个位置的 。 也管理某
种 状态,像选择与焦点。你可以通过调用 !!$"#来选择 ,它需
要提供一个任意的形状为参数。这个函数也作为在 实现橡皮筋选择功能的一个基础。为得到
这些已经被选择的 调用 !!"#。另一个状态处理是是否一个 拥有键
盘输入焦点。你可以调用 !!)."#或 !!)."#来设定焦点,也可
用 !!/."#来得到当前拥有焦点的那个 。最后, 允许你通过调
用 !!"#函数把部分场景送到绘图设备进行渲染。
视图
提供了视图部件,它可视化场景中的内容。你可以联结多个视图到同一个场景,对这个相同的
数据集提供几个视口。视口部件是一个滚动区域,它提供了滚动条以对大场景进行浏览。为了使用 01你
应该调用 !!"#来把一个 12 设为视口。视图从键盘,鼠标接收输入事件,
在发送这些事件到场景之前,会对这些事件进行适当的翻译(把事件坐标转换成对应的场景坐标)。
利用转换矩阵,!!3"#视图可变换场景的坐标系统。这允许高级的导航特性,如缩放,旋
转。为了方便, 也提供了在视图与场景之间进行坐标转换的函数:
!!4"#!!)"#。
4
是场景中图形 的基类。提供了一些标准的、用于典型形状的 。
像矩形"&#椭圆(5#文本"43#当你写定制的
时,那些最有用的一些 特性也是有效的。除此这外, 支持以下特性:
'鼠标按、移动、释放、双击事件,鼠标悬停事件,滚轮事件,弹出菜单事件。
'键盘输入焦点,键盘事件。
'拖拽
'组,包括父子关系,使用 .
'碰撞检测
如同 一样,位于本地坐标系,它也为 与场景之间, 与 之间的坐标转换
提供许多工具函数。而且,也像 一样,它使用矩阵来变换它的坐标系统:
!!3"#。它对旋转与缩放单个的 比较有用。
可以包含别的 "孩子)。父 的转换被它的子孙所继承。然而,它的所有函数(也就是,
!!"#!!6.&"#!!2"##不会积
累这些转换,依然在本地坐标下工作。
通过 !!"#,!!2"##来支持碰撞检测。这两个
都是虚函数。从 "#返回你的 的形状(以本地坐标 表示), 会为你
处理所有的碰撞检测。假如你想提供自己的碰撞检测,你应该重新实现 !!2"#。
Graphics View
坐标系统
基于笛卡尔坐标系。 在场景中的位置与几何形状通过 37 坐标表示。当使用未经变形的视
图来观察场景时,场景中的一个单位等于屏幕上的一个像素。在 中有三个有效的坐标系统:
坐标系,场景坐标系,视图坐标系。为了简化你的实现, 提供了方便的函数,允许三个坐
标系之间相互映射。
当渲染时, 的场景坐标对应于 的逻辑坐标,视图坐标与设备坐标相同。
Item 坐标
位于它们自己的坐标系中。它的坐标都以点"**#为中心点,这也是所有变换的中心点。在 坐标系
中的几何图元,经常被称为 点, 线, 矩形。当创建一个定制的 坐标是所需要考虑的。
与 可以为你执行所有转换,这使得实现定制的 变得容易。举例来说,
假如你收到鼠标按或是拖进入事件,事件的位置以 坐标的形式给出。!!"#虚函数,
当某个点的位置在你的 范围内时,返回 .否则返回 /。这个点参数使用 坐标,相似地,
的包围矩形与形状也使用 坐标。
位置指的是 的中心点在它父亲的坐标系中的坐标。以这种思想来看,场景指的就是那些祖先最少的
的“父亲”。最上级的 位置就是在场景中的位置。
子坐标与父坐标之间是相关的,假如孩子未经变换,子坐标与父坐标之间的差值等于在父坐标系下,父 与
子 之间的距离。例如,假如一个未经变换的子 位置与其父 的中心重合,那么这两个 的坐
标系统完全相同。如果孩子的位置是(+*,*),那么孩子坐标系中的"*+*#点,对应于父坐标系中的
(+*,+*)点。
因为 的位置与变换是相对于父 的,子 的坐标不会被父亲的变换影响,尽管父 的变换隐含
地对子 做了变换。在上面的例子中,即使父 旋转,缩放,子 的"*+*#点依然对应于父 的
"+*+*#点。然而,相对于场景来讲,子 会遵循父 的变换。假如父 被缩放"88#子 的
位置在场景中的坐标是(*,*),它的(+*,*)点则与场景中的(*,*)对应 。除了
!!"#, 的函数以 坐标工作,如一个 9 包围矩形总是以 坐
标的形式给出。
场景坐标
场景坐标系统描述了每个最顶级 的位置,也是从视图向场景投递场景事件的基础。场景中的每个 有
场景位置与包围矩形(!!"#!!.&"##另外,它有
自己本地 位置与包围矩形。场景位置描述了 在场景坐标下的位置,它的场景包围矩形则用于
决定场景中哪块区域发生了变化。场景中的变化通过 !!"#信号来
通知,它的参数是场景矩形列表。
视图坐标
视图坐标是 的坐标,视图坐标中每个单位对应一个像素。这种坐标的特殊之处在于它是相对于
或是视口的,不会被所观察的场景所影响。 的视口的左上角总是(*,*),右下角总是"视口
宽,视口高)。所有的鼠标事件与拖拽事件,最初以视图坐标表示,就应该把这些坐标映射到场景坐标以便与
交互。
剩余34页未读,继续阅读
zhg2507
- 粉丝: 5
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1