Qt示例 | 仿射变换示例 Affine Transformations(十二)

205 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第23天,点击查看活动详情

注:示例为Qt 5.1.1中的示例。
本文旨在剖析Qt示例的源码,总结函数使用方法以及编程思想,提高自己的编程能力。

示例运行效果:

1.gif

文件目录:

image.png image.png

具体实现:

XFormView类:

drawVectorType函数:

这个函数主要完成了矢量图的绘制,也就是示例中的企鹅,通过使用坐标变换、完成曲线、直线、路径的绘制以及颜色的填充。

当我们用到图形的变换的时候,首先选择使用坐标系来控制。通过设置坐标系,就可以控制坐标系内所有图形的变化。

drawPixmapType函数:

image.png

图片资源已经在构造函数中加载过了,这里直接用就可以了。首先设置坐标系的中心位置。然后设置绘图设备的缩放、旋转、变形度的值。
这里设置坐标系到图片中心,在进行设置,是为了让坐标系的各种变换都是以中心点为准。
而画图的时候,需要将坐标系的中心点挪到左上角,进行画图。

drawTextType函数:

image.png

这个函数主要完成了文字的绘制。

QFont: QFont类指定用于绘制文本的字体。

创建一个字体:

QFont font("Times", 10, QFont::Bold);
QFont font2("Helvetica [Cronyx]", 12);

创建一个字体可以根据自己的需要选择构造函数。也可以创建一个空的字体,然后像示例中一样调用set函数进行各个属性的设置。

QFontMetrics: 提供字体度量信息。QFontMetrics函数计算给定字体的字符和字符串的大小。我们可以通过这个类获取文字的边缘矩形信息。
还有很多其他的函数,有几个函数可以对字体进行操作:ascent(), descent(), height(), leading()和linespace()返回字体的基本大小属性。underlinePos()、overlinePos()、strikeOutPos()和lineWidth()函数返回加下划线、加下划线或删除字符所在行的属性。

updateCtrlPoints函数:

image.png

控制点0是图形中心的点,用于拖拽的。控制点1是右边的点,用来控制旋转的。这个函数是HoverPoints信号的槽函数。当HoverPoints当中的点位置发生改变,视图也要发生改变。

未完待续...