QT入门(六) GraphicsView控件的使用

版权声明: https://blog.csdn.net/qq_25147107/article/details/84333613

       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()其他图元到本图元

猜你喜欢

转载自blog.csdn.net/qq_25147107/article/details/84333613
今日推荐