QGraphicsView、QGraphicsScene、QGraphicsItem 是 Qt 框架中用于创建和显示2D图形的重要类。它们各自具有不同的功能和用法,下面是它们的区别和用法的简要说明:
-
QGraphicsScene(场景):
QGraphicsScene 是一个图形场景,用于管理2D图形项(QGraphicsItem)。它是一个虚拟的画布,可以在其中添加、删除和管理多个图形项。场景提供了一个容器,可以在其中放置图形项,并在需要时进行管理和操作。可以将场景想象为一个绘图板,而图形项就是在绘图板上绘制的图形元素。用法:
- 创建一个 QGraphicsScene 对象:
QGraphicsScene *scene = new QGraphicsScene(parent);
- 向场景中添加图形项:
scene->addItem(item);
- 从场景中移除图形项:
scene->removeItem(item);
- 处理场景的事件:重写
QGraphicsScene
的事件处理函数(如mousePressEvent()
、keyPressEvent()
等)。 - 将场景与 QGraphicsView 关联以显示图形:
view->setScene(scene);
- 创建一个 QGraphicsScene 对象:
-
QGraphicsView(视图):
QGraphicsView 是用于显示 QGraphicsScene 中的图形项的可视化组件。它提供了一个视口,可以在其中显示场景,并支持用户交互操作(如平移、缩放、选择等)。视图负责将场景中的图形项渲染到屏幕上,并处理与视图相关的事件。用法:
- 创建一个 QGraphicsView 对象:
QGraphicsView *view = new QGraphicsView(parent);
- 将视图与场景关联:
view->setScene(scene);
- 设置视图的显示模式和行为(可选):如
view->setRenderHint()
、view->setDragMode()
等。 - 自定义视图的交互行为:重写
QGraphicsView
的事件处理函数。 - 将视图添加到应用程序的窗口或布局中,以便显示:
layout->addWidget(view);
- 创建一个 QGraphicsView 对象:
-
QGraphicsItem(图形项):
QGraphicsItem 是在 QGraphicsScene 中显示的图形元素。它可以是图形图元(如矩形、椭圆、文本等)或自定义的图形项。每个图形项都可以具有自己的属性(如位置、旋转、缩放等),可以接收鼠标和键盘事件,并可以根据需要进行自定义绘制。用法:
- 创建一个自定义的 QGraphicsItem 子类,并实现必要的函数(
boundingRect()
、paint()
等)。 - 在子类中处理图形项的交互事件(如
mousePressEvent()
、keyPressEvent()
等)。 - 在场景中创建图形项并添加到场景中:
scene->addItem(item);
- 根据需要设置和修改图形项
- 创建一个自定义的 QGraphicsItem 子类,并实现必要的函数(
上面内容由chatgpt回答,个人认为合理,仅供学习参考。