坐标转换-知识点
// 定义;
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查找函数都以出栈序列返回(也就是说,第一个返回的是最顶端的,最后一个返回的是最底端的)。