多语言展示
当前在线:238今日阅读:84今日分享:32

如何理解Qt中的坐标体系?

Qt中的坐标系是由QPainter类,QPaintDevice类,QPintEngine类来控制的,QPainter类构造Qt绘图系统的基础,用来执行绘图任务,QPaintDevice是使用QPainter去绘画的一个二位空间地方,QPaintEngine提供不同设备绘图的通用接口,他们使用了桥接模式。QPaintDevice是绘图场所的基本对象,他的能力被QWidget,QImage,QPixmap,QPicture,QOpenGLPaintDevice这些绘图场所类所继承。绘图场所的默认坐标原点是在左顶点,右下方向延伸。默认的一个单元是指像素设备上的一个像素,以及打印设备上的一个点,即1/72英寸。QPainter类的逻辑坐标和QPaintDevice的物理坐标间的映射是由QPainter的变换矩阵,视图可见区域,和窗体来处理的。默认情况下,逻辑和物理坐标是一样的。QPainter支持坐标的转换(像旋转和缩放)。 在渲染过程中,GraphicsView的场景坐标对应QPainter的逻辑坐标,视图坐标和设备坐标一样。
工具/原料
1

QtCreator

2

Qt5.9.2

方法/步骤
1

从上图,我们可以看到,左边图形的原始大小,size即宽和高,对应它的矩阵模型,对使用的渲染工具像pen的绘制线条的粗细大小是进行忽略的。 在混合绘图的时候,像素的渲染是由QPainter::Antialiasing这一枚举渲染配置项决定的。RenderHint枚举变量描述了QPainter的渲染选项,这些选项也许有的引擎是不支持的。QPainter::Antialiasing这个枚举项表示引擎会平滑图形的原始边缘,例如使用不同的彩色亮度平滑边缘。

2

默认情况下,我们可以从上面左图看到,当使用1像素宽的pen去做图形渲染的时候,图形的渲染是从起点开始到右边数学意义上的点的下方。 当使用偶数像素宽的pen去渲染的时候,像素是会被对称地渲染在数学意义上的点的周围的。当使用奇数像素宽的pen去渲染的时候,空余的像素会作为一个像素渲染在数学意义点的右下方。结合实际例子看一下:

4

坐标变换:通常,QPainter在相关设备自己的坐标系里绘图,但也完全支持仿射坐标变换。我们可以通过QPainter::scale()函数缩放坐标系,通过rotate()函数旋转坐标系,通过translate()函数翻转坐标系通过shear()函数,我们可以扭转坐标系,通过worldTransform()函数我们可以获取QPainter的变换矩阵QTransform,这个里面的矩阵参数是可以查看的。

注意事项
1

这里我们重点要理解几何点和像素点之间是渲染的关系

2

注意坐标系变换关键还是看参照的是哪个坐标系,这样很多问题就很容易理解了

推荐信息