QT的Graphics View框架与坐标系

本文深入探讨了QT的Graphics View框架,详细介绍了其坐标系统,包括Item坐标、场景坐标和视图坐标,以及它们之间的映射转换。此外,还讲解了Graphics View的体系结构,包括场景、视图和items的角色与交互,强调了坐标变换在缩放、旋转和导航特性中的应用。文中还提到了关键特性,如事件处理、拖拽支持、动画和OpenGL渲染。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

坐标转换-知识点

// 定义;
QGraphicsView * m_pView;
QGraphicsScene * m_pScene;
QGraphicsItem * m_pItem;

// 返回 view 中可以看到的区域的顶点和长宽;
QRectF sR = m_pView->sceneRect();

// 设置 scenne 的原点位置;
m_pScene->setSceneRect(QRectF());

// pos() 获取view的位置是从 中心点 到 父类 上的坐标;
QPointF POS = m_pView->pos();

// 获取 view (0 0) 点到 scene 上的坐标;
QPointF scennePos = m_pView->mapToScene(0, 0);

// scenePos() 获取view的位置是从 中心点 到 scene 上的坐标
// 若 m_pItem 无父类,则与 scenePos() 函数返回值相同;
QPointF scenneFPos = m_pItem->scenePos();
QPointF FPos = m_pItem->pos();

// 将 m_pItem 恢复到 view 视图(0, 0)点;
// view 视图(0, 0)点,相对 scene 的位置 viewFSceneO;
QPoint viewFSceneO = m_pView->mapFromScene(0, 0); // 获取 view (0,0)点相对 scene 的位置
m_pItem->setPos(-viewFSceneO.x(), 0); // 相对父类,当其无父类时,与 moveBy 等效
m_pItem->moveBy(-viewFSceneO.x(), 0); // 相对scene 

// 更改 view 坐标的原点位置 为 相对 scene 的(0, 0)点;
m_pView->translate(0, 0);

前言

Graphics View提供了一个界面,它既可以管理大数量的定制2D graphical items,又可与它们交互,有一个view widget可以把这些项绘制出来,并支持旋转与缩放。这个柜架也包含一个事件传播结构,对于在scene中的这些items,它具有双精度的交互能力。 Items能处理键盘事件,鼠标的按,移动、释放、双击事件,也可以跟踪鼠标移动。Graphics View使用BSP树来提供对item的快速查找,使用这种技术,它可以实时地绘制大规模场景,甚至以百万items计。Graphics View在Qt 4.2中被引用,它替代了它的前辈QCanvas。

Graphics View的体系结构

Graphics View提供的是一种类似于Qt model-view的编程。多个views可以监视同一个场景,而场景包含多个具有多种几何外形的items。


场景

QGraphicsScene 表示Graphics View中的场景,它有以下职责:
为管理大量的items提供一个快速的接口。
传播事件到每个item。
管理item的状态,例如选择,焦点处理。
提供未经变换的渲染功能,主要用于打印。
场景作为QGraphicsItem对象的容器。通过调用QgraphicsScene::addItem()把这些Items加入到场景中。可以使用众多的查找函数来获取特定的items。QGraphicsScene:items()与它的许多重载函数可获取那些与点、矩形,多边形,向量路径等相交或是有包含有关系的items。QGraphicsScene::itemAt()返回特定上最顶端的item。所有的item查找函数都以出栈序列返回(也就是说,第一个返回的是最顶端的,最后一个返回的是最底端的)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值