Qt中QGraphicsView三种坐标系统详解

在QGraphicsView中支持三种不同的坐标系统---视口坐标、场景坐标、项坐标

场景坐标就是系统窗口(QGraphicsScene)的坐标,它(0,0)作为它的左上角坐标.

视口坐标相当于场景坐标的数学变换,如当一个窗口坐标为(0,0)至(100,100)那么这个窗口就是实实在在的由100*100个像素组成,此时把坐标变换为(-50,50)(即场景坐标(0,0))至(50,-50)(即场景坐标为(100,100))那么这个视口坐标就是以(0,0)为中心了.当放大缩小item时可以改变视口坐标的大小(如放大1倍)视口坐标可以变为(0,0)至(50,50).

而项坐标则为item本身的坐标,它不随场景坐标、视口坐标变化并且以(0,0)为中心.

在c++ GUI Qt编程(第二版) Cityscape中有段这样的程序:

QRectF Annotation::boundingRect()const
{
    QFontMetrics metrics(font);
    QRectF rect=metrics.boundingRect(str);//计算文字外接矩形
    rect.translate(-rect.center());
    rect.adjust(-4,0,+4,0);
    return rect;
}

一开始我看到这段程序时总是不理解rect的坐标是怎么来的,它是用str计算外接矩形,但是外接矩形哪里有坐标呢?后来仔细想想在这程序之前在图表应用程序中也有这样的代码,书上是这样说的:"由字体规格函数返回的外接矩形总是把(0,0)作为其左上角".现在理解这句话的意思为:rect的坐标是项坐标,它把项的中心作为其左上角的顶点(好像除了这种方法也无其它方法给它坐标了,这种方法想想也很合理,不论外接矩形和项的尺寸有多大总是将外接矩形的左上角放在项的中间).

void Annotation::paint(QPainter *painter,
 
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值