没有合适的资源?快使用搜索试试~ 我知道了~
QT图形视图框架(The Graphics View Framework)详细介绍
3星 · 超过75%的资源 需积分: 41 73 下载量 99 浏览量
2013-06-18
11:56:03
上传
评论
收藏 435KB PDF 举报
温馨提示
试读
14页
详解介绍Qt中视图框架机制及场景中主要的常用函数作用及用法,是学习者可以对Qt的场景视图有深入的了解。
资源推荐
资源详情
资源评论
图形视图框架
The Graphics View Framework
关键词翻译对照表:
Graphics View:图形视图。
Scene:场景 /场景管理器( Scene 同时担负着管理场景中的对象,建立索引等工作)。
Item:这里翻译为对象, Graphics View Framework 下的 GraphicsItem 是场景中可以被
显示的元素。这里翻译成对象便于理解。
Graphics Item:图形对象。
Event:事件,等同于 Windows 下的消息。
正文:
图形视图( Graphics View )提供了支持大量自定义的二维图形对象( Item ,这里译为 “ 对象 ” ,方
便大家理解)交互( Interaction )的管理器,以及一个支持缩放和旋转操作的视图 widget 用于显示这
些元素。
该框架包含了事件( Event ,在 Windows 下可以理解为 “ 消息 ” )传播的框架,支持场景管理器中精
确的交互能力,以双精度浮点数表示对象位置、大小等属性的变化。图形元素还能处理键盘事件、鼠标
按下 / 移动 / 释放和双击的时间,同时也能跟踪鼠标移动。
图形视图使用 BSP 树( Binary Space Partitioning ,二叉空间分割)提供对图形对象的快速查找,可
以想像,即使是包含数以百万计对象的超大场景,也能够进行实时显示。
图形查看 Qt 中引入 4.2 ,取代其前身 QCanvas。 如果您要从 QCanvas 中移植过来,见 移植到图
形视图 。
主题:
图形视图架构
场景
视图
对象
图形视图框架中的类
图形视图坐标系
对象坐标
场景坐标
视图坐标
坐标映射
主要特点
缩放和旋转
打印
拖放
鼠标指针和 tooltip
动画
OpenGL 渲染
元素组
widgets 和布局
QGraphicsWidget
QGraphicsLayout
嵌入式 widget 支持
性能
浮点运算指令
图形视图架构
图形视图提供基于图像对象的方式来实现 model-view 的编程模式,这一点很像例程 InterView 中
的辅助类 QTableView, QTreeView 和 QListView。不同的视图可以显示一个场景,场景则包
含了不同的几何形状的对象。
场景
QGraphicsScene 提供了图形视图的场景管理器。场景管理器有如列职责:
提供一个用于管理大量对象的快速接口
将事件传递到每个对象上
管理对象的状态
提供未进行坐标变换的渲染功能,主要用于打印
场景管理器是图形对象 QGraphicsItem 的容器。调用 QGraphicsScene::addItem()将对象添
加到场景中后,你就可以通过调用场景管理器中的不同的查找函数来查找其中的图形对象。
QGraphicsScene::items()函数及其重载函数可以返回所有通过点、矩形多边形或路径等不同方式
选中的所有对象。 QGraphicsScene::itemAt()返回在指定点位置上最上面的对象。所有找到的对
象保持按照层叠递减的排列顺序(即第一个返回的对象是最顶层,和最后一个项目是最底层的对象)。
QGraphicsScene scene;
QGraphicsRectItem *rect = scene.addRect(QRectF(0, 0, 100, 100));
QGraphicsItem *item = scene.itemAt(50, 50);
// item == rect
QGraphicsScene 的事件传递机制负责将场景时间传递给图形对象,同时也管理对象之间的时间传递。
如果场景在某个位置得到鼠标按下的消息,就将该事件传递给这个位置上的对象。
QGraphicsScene 同时还管理对象的状态,例如对象的选中状态和焦点状态。您可以通过
调用 QGraphicsScene::setSelectionArea(),传递一个任意形状给场景管理器,选中其
中包含的对象。此功能也是 QGraphicsView 中拉框选择( rubber band)的基础。通过
调用 QGraphicsScene::selectedItems()可以获取当前选择集中的所有对象。另外一种
通过 QGraphicsScene 来管理的状态是:一个图形对象是否能够相应键盘的焦点切换 .你
可以调用 QGraphicsScene::setFocusItem () 或者 QGraphicsItem::setFocus ()将键盘
焦点切换到对于的图形对象上,或者通过 QGraphicsScene::focusItem ()获取当前的焦
点对象。
最后, QGraphicsScene 允许你通过 QGraphicsScene::render ()将部分场景绘制到 paint
device “ ”上。你可以在本文档中关于 打印 的章节了解更多关于这一点的更多细节。
视图
QGraphicsView 提供了视图 widget,将场景中的内容显示出来。你可以用几个不同的视图来观察
同一个场景,从而实现对于同一数据集的不同 viewport。该 Widget 同时也是 scroll area,为大
场景提供滚动条。如果要启用 OpenGL 支持,可调用 QGraphicsView::setViewport 将
QGLWidget 设置为其 viewport。
QGraphicsScene scene;
myPopulateScene(&scene);
QGraphicsView view(&scene);
view.show();
视图接受键盘和鼠标消息,并将这些消息转换成场景事件(同时将视图坐标转换为场景坐标),然后将
事件发送给可见视图。
通过操作变换矩阵 QGraphicsView::transform ,视图可以对场景的坐标系统进行变换,从而实
现缩放、旋转等高级查看功能。为了方便起见, QGraphicsView 同时也提供了在视图坐标和场景坐
标之间变化的函数: QGraphicsView::mapToScene () 和
QGraphicsView::mapFromScene ()。
对象
QGraphicsItem 是场景中所有图形独享的基类。图形视图提供了几种标准的对象:矩形 (
剩余13页未读,继续阅读
资源评论
- 仙云野鹤2014-04-18东西一般,基本上抄袭的
- 六街尘0072014-03-14书上的,没太多价值
- fgl5782014-02-21东西一般,基本上抄袭的
祥龙九霄
- 粉丝: 9
- 资源: 25
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功