Graphics View Framework

Posted 张三和李四的家

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Graphics View Framework相关的知识,希望对你有一定的参考价值。

Graphics View Framework

文章目录


Graphics View 提供了一个用于管理大量定制的2D 图形项目并与之交互的表层,以及一个用于可视化这些item的Widget,并支持缩放和旋转。

该框架包含一个事件传播架构,该架构允许对scene 中的item 进行双精度交互能力。item 可以处理按键事件,鼠标按下、移动、释放和双击事件,还可以跟踪鼠标的移动事件。

The Graphics View Architecture

Graphics View 提供一种基于 item 的方法来进行 model-view 编程,非常类似 QTableViewQTreeViewQListView。多个视图可以观察一个场景,并且该场景包含各种几何形状的 item。

Scene

QGraphicsScene 提供了图形视图场景,这个场景有以下责任:

  • 提供用于管理大量项目的快速界面
  • 将事件传播到每个 item
  • 管理 item 的状态,例如选中和焦点处理
  • 提供未转换的渲染功能

scene用作 QGraphicsItem对象的容器,通过 QGraphicsScene::addItem 将 item添加到场景中。

View

QGraphicsView 提供了视图部件,该部件可将场景的内容可视化。你可以将多个视图附加到同一个场景,以在同一个数据集合中提供多个视图窗口。View widget是一个滚动区域,并提供用于在大型场景中导航的滚动条。该视图从键盘和鼠标接受事件,并将其转换为场景事件(将事件发送到场景之前,将其转换为场景坐标)。

使用QGraphicsView::transform可变换矩阵,可以变换场景的坐标系。这可实现高级导航功能,例如旋转和缩放。为了方便,QGraphicsView还提供了用于在视图和场景坐标之间进行转换的函数QGraphicsView::mapToScene()和QGraphicsView::mapFromScene()

Item

QGraphicsItem 是场景中图形项的基类。Graphics View 为典型形状提供了几个标准项,例如矩形,椭圆和文本项,但是在编写自定义项时,需要使用 QGraphicsItemQGraphicsItem支持以下功能:

  • 鼠标按下、移动、释放和双击事件,以及鼠标悬停事件,滚轮事件和上下文菜单事件
  • 键盘输入焦点和按键事件
  • 拖放
  • 通过父子关系以及 QGraphicsItemGroup进行分组
  • 碰撞检测

item 位于局部坐标系中,并且像 QGraphicsView一样,它提供了许多用于在 项目和 场景 之间以及 项目与 项目 之间映射坐标的功能。而且,像 QGraphicsView一样,它可以使用矩阵QGraphicsItem::transform()变换其坐标系。这对旋转和缩放单个 项目 很有用。

自定义item

要编写自己的图像 item ,首先创建 QGraphicsItem的子类,然后实现两个纯虚函数boudingRect返回该 item 绘制区域的估计值和paint 实现绘画的内容。
重载shape则提供了 item 形状的准确轮廓。例如:

class Food : public QGraphicsItem

    public:
    QRectF Food::boundingRect() const
    
        return QRectF(-TILE_SIZE, -TILE_SIZE,
                      TILE_SIZE * 2, TILE_SIZE * 2);
    

    void Food::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
    
        painter->setRenderHint(QPainter::Antialiasing);
        painter->fillPath(shape(), Qt::red);
    

    QPainterPath Food::shape() const
    
        QPainterPath p;
        p.addEllipse(QPointF(TILE_SIZE / 2, TILE_SIZE / 2), FOOD_RADIUS, FOOD_RADIUS);
        return p;
    
;

以上是关于Graphics View Framework的主要内容,如果未能解决你的问题,请参考以下文章

Qt基础之二十九:图形视图框架(Graphics View Framework)及其应用

如何将 Accelerate Framework 与 Core Graphics 一起使用?

Graphics View绘图架构

Graphics View绘图架构

自定义view刮刮乐

自定义View的混合模式的使用实例