Qt开发:Graphics View框架

       Qt的Graphics View框架是一个用于处理和展示大量2D图形项的强大工具。它被设计用来替代之前的QCanvas类,提供了更高级的功能和更好的性能优化。QGraphicsView、QGraphicsScene 和 QGraphicsItem 类这三个类共同构成了 Graphics View 框架。

核心概念

  1. 场景(Scene)

    • 使用QGraphicsScene表示一个管理大量图元(items)的容器。
    • 场景是图元的容器,负责管理所有添加到其中的图元的位置、选择状态、碰撞检测等。
  2. 视图(View)

    • 通过QGraphicsView来显示场景中的内容。
    • 视图是用户与场景交互的窗口,可以有多个视图显示同一个场景,并且支持缩放、旋转等变换。
  3. 图元(Items)

    • 图元由QGraphicsItem及其子类表示,如QGraphicsRectItem, QGraphicsEllipseItem, QGraphicsPixmapItem等。
    • 每个图元都是独立的对象,可以有自己的几何形状、位置、变换属性以及事件响应机制。

主要功能

  • 高效的渲染引擎:Graphics View使用BSP(Binary Space Partitioning)树来快速确定哪些图元需要重新绘制,从而提高渲染效率。
  • 支持分组:可以通过将一个图元设置为另一个图元的父级来创建图元组,这样可以一起移动或变换一组图元。
  • 事件传播:提供了一套完整的事件模型,允许图元接收键盘、鼠标和其他输入设备的事件。
  • 拖拽支持:内置了对拖拽操作的支持,方便实现图元间的拖拽行为。
  • 碰撞检测:支持基于形状的精确碰撞检测,可用于游戏开发或其他需要物理交互的应用中。

使用步骤

  1. 创建场景:实例化一个QGraphicsScene对象,并调用其setSceneRect()方法设置场景边界。
  2. 添加图元:创建各种类型的QGraphicsItem子类对象,并调用场景的addItem()方法将它们添加到场景中。
  3. 创建视图:实例化一个或多个QGraphicsView对象,调用其setScene()方法关联到相应的场景。
  4. 配置视图:根据需要调整视图的属性,如缩放比例、背景色等。

QGraphicsView

QGraphicsView 是可视化组件,用于显示 QGraphicsScene 的内容。

主要功能:

  • 提供可视化窗口,用户可以查看场景

  • 支持缩放和旋转

  • 处理视图转换

  • 提供滚动条

  • 可以作为视口嵌入到其他小部件中

常用方法:

// 设置场景
void setScene(QGraphicsScene* scene);

// 视图变换
void scale(qreal sx, qreal sy);  // 缩放
void rotate(qreal angle);        // 旋转
void translate(qreal dx, qreal dy); // 平移

// 获取/设置视图参数
QGraphicsScene* scene() const;
void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
void setViewportUpdateMode(ViewportUpdateMode mode);

QGraphicsScene

QGraphicsScene 是图形项的容器,管理所有 QGraphicsItem 对象。

主要功能:

  • 管理大量图形项

  • 传播事件给图形项

  • 提供未变换的渲染功能

  • 管理图形项状态(选择、焦点等)

  • 提供高效的碰撞检测

常用方法:

// 添加/移除项
QGraphicsItem* addItem(QGraphicsItem* item);
void removeItem(QGraphicsItem* item);

// 查找项
QList<QGraphicsItem*> items() const;
QList<QGraphicsItem*> items(const QPointF& pos) const;

// 场景属性
QRectF sceneRect() const;
void setSceneRect(const QRectF& rect);

// 事件处理
void mousePressEvent(QGraphicsSceneMouseEvent* event);
void keyPressEvent(QKeyEvent* event);

QGraphicsItem

QGraphicsItem 是场景中图形项的基类,可以被添加到 QGraphicsScene 中。

主要功能:

  • 提供图形项的几何形状

  • 处理鼠标和键盘事件

  • 支持分组(通过 QGraphicsItemGroup)

  • 支持拖放

  • 支持碰撞检测

常用方法:

// 几何属性
QRectF boundingRect() const;  // 必须重写
QPainterPath shape() const;   // 可选重写

// 外观
void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr);  // 必须重写

// 位置和变换
void setPos(const QPointF& pos);
void setRotation(qreal angle);
void setScale(qreal factor);

// 状态
void setSelected(bool selected);
void setFocus();

三者关系

  1. QGraphicsView 是观察者,可以有多个视图观察同一个场景

  2. QGraphicsScene 是场景,管理所有图形项

  3. QGrap

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值