GraphicsView框架结构主要包括三个类:QGraphicsScene(场景)、QGraphicsView(视图)、QGraphicsItem(图元)。
主要应用方式是:GraphicsView绘图时首先创建一个场景,然后创建图元对象(如一个直线对象、一个多边形对象),再使用场景的add()函数,将图元对象添加到场景中,最后通过视图进行显示,部分代码如下:
QGraphicsScene *scene = new QGraphicsScene;
scene->addPixmap(QPixmap::fromImage(*image));
ui->graphicsView->setScene(scene);
ui->graphicsView->resize(image->width() + 10, image->height() + 10);
ui->graphicsView->show();
分别介绍三个类:
一、QGraphicsScene(场景)
QGraphicsScene是不可见的,只用于管理图元。为了查看场景,需要创建一个视图组件。
一个场景分为三个层:图元层、前景层和背景层。场景的绘制总是从背景层开始,然后是图形项层,最后是前景层。
主要功能如下:
1、管理大量图元,查找,添加,移动和删除等动作。
2、传递鼠标和键盘事件给图元。
二、QGraphicsView(视图)
1、 QGraphicsView是视图窗口部件,使场景内容可视化,可以连接多个视图到一个场景,也可以为相同数据源的数据集提供不同的视图。
2、视图接收键盘和鼠标的输入事件,并把事件翻译为场景事件(将坐标转换为场景的坐标),再发送到场景。
三、QGraphicsItem(图元)
1、QGraphicsItem是图元的基类。QGraphics View框架提供了多种标准的图元: QGraphicsEllipseItem(椭圆)、QGraphicsSimpleTextItem(简单文本图元)等
2、支持鼠标和键盘事件,支持碰撞检测
3、向场景中添加图元(需要引用头文件qgraphicsitem.h)
QGraphicsScene* originalScene = new QGraphicsScene(this);
QGraphicsRectItem* rect0 = new QGraphicsRectItem(1, 2, 1000, 1000, 0);
Scene->addItem(rect0);
Scene->itemAt(100, 100, QTransform());
四、GraphicsView的坐标系统
分别包括图元坐标系、场景坐标系、制图坐标系,坐标变换函数如下:
QGraphicsView::mapToScene()视图到场景
QGraphicsView::mapFromScene() 场景到视图
QGraphicsItem::mapFromScene() 场景到图元
QGraphicsItem::mapToScene() 图元到场景
QGraphicsItem::mapToParent() 子图元到父图元
QGraphicsItem::mapFromParent() 父图元到子图元
QGraphicsItem::mapToItem()本图元到其他图元
QGraphicsItem::mapFromItem()其他图元到本图元