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

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));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值