需求
在QGraphicsRectItem上绘制文字,有下述要求:
- 文字能够随着Item的尺寸的变化而缩放
- 若增加文字则要按照拉伸或者压缩后的比例增加或者删除文字
实现思路
实现文字的缩放只能通过painter.scale(sx,sy)缩放坐标系,从而将文字绘制到固定区域上。需要注意两点:
- 缩放比例的计算
利用QPainter->fontMetrics()计算文本的宽度和高度,并与Item->rect()的宽度和高度作比就是缩放的比例。 - drawText绘制区域以及对齐方式的设置
关于绘制大小。drawText(QRectF rect, QString text)中绘制区域rect,与当前Item->rect()大小并不相等,绘制区域rect与缩放没有关系,缩放只是视觉上呈现出来的文字占用的区域增加或者缩小,但是实际上的绘制区域rect仍然应该是QPainter->fontMetrics()得到的宽高。
关于绘制原点。QGraphicsItem::paint中绘制原点为Item的局部坐标系的原点,和QGraphicsItem在局部坐标系中的位置无关。因此若要将文字绘制到矩形上,或者移动Item,将矩形在局部坐标系中的位置转移到pos上,或者每次都要获取Item在局部坐标系的坐标,而后将painter移动到对应的位置。
对齐方式的设置和缩放的位置有关。缩放是以坐标原点为缩放中心进行缩放的,通过translate可平移坐标系,在缩放过程中,坐标系原点在Item中的相对位置不发生变化,但是其他的点都会发生变化。(就像把伞撑开,从垂直方向看,就中心点的位置不变,而其他点的位