Qt Graphics View Framework(2)---坐标系

    xiaoxiao2021-12-14  20

    Qt Graphics View坐标系统

    Graphics View基于笛卡尔坐标系。item在场景中的位置与几何形状通过x,y坐标表示。在Graphics View中有三个有效的坐标系统:视图坐标系,场景坐标系,Item坐标系。

    视图坐标系

    视图坐标是widget的坐标,它是相对于widget或是view的,它的视口的左上角总是(0,0),右下角总是(width,height)。 在上一篇中,我们对QGraphicsView的坐标设置就是设置视图坐标系。

    QGraphicsView view(&scene); view.setGeometry(200,200,400,400);//视图坐标系

    场景坐标系

    场景坐标系包含了各个顶级item的位置,通过QGraphicsItem::scenePos(),QGraphicsItem::sceneBoundingRect()来确定每一个item的位置。

    QGraphicsScene scene; scene.setSceneRect(-300,-300,600,600);//场景坐标系

    item在场景坐标系中的位置

    item->setPos(0,0);

    Item坐标系

    每个item在场景坐标系中设好pos后,它们就以pos为原点,拥有自己的坐标系,比如boundingRect确定的重绘范围和shape确定的形状就是以item的坐标系来确定的。每个item的变换都是以自身的pos为原点。

    QRectF boundingRect()const { return m_rect; } QPainterPath shape()const { QPainterPath path; path.addRect(m_rect); return path; }

    坐标转换

    Graphics View提供了方便的函数,允许三个坐标系之间相互映射。 例如:

    qDebug() << view.mapToScene(0,0,200,200);

    输出

    QPolygonF(QPointF(-190, -199) QPointF(10, -199) QPointF(10, 1) QPointF(-190, 1) )

    此外view和item都拥有以mapto和mapfrom开头的一系列坐标变换函数。

    变换

    上一章中讲了一些简单的变形,事实上我们可以在Qt Graphics View中使用我们的线性代数知识来应用一些变换。 例如对单独的item设置变换

    item->setMatrix(QMatrix(2,1, 0,1, 0,0));//最后一排的作用参考平移矩阵

    对view设置变换

    view.setMatrix(QMatrix(1,1, 0,1, 0,0));
    转载请注明原文地址: https://ju.6miu.com/read-968435.html

    最新回复(0)