qt 2d做图的一些心得
最近在用qt做一个可以显示2维折线图的小工具。用qt相关部分做的时候还是发现了一些问题,记录一下。
1.关于视口和窗口变换,最好不要用改变视口窗口变换来实现图像移动的功能。视口和窗口最好按照1:1变换,用来调整x,y轴方向和原点位置即可。如果说你讲一个500x500的窗口映射成300x10的视口,那么图像会变得很扁。
2.关于y轴的反转。窗口默认的y轴是朝下的,和我们习惯不同 ,用视口窗口变换将其转变为朝上。注意在处理图像移动的时候,我们处理的物理坐标,依旧是y轴向下,计算dy的时候注意不要减反。或者我们不要在视口窗口变换的时候不处理y轴反转,而是在逻辑坐标系中做相应的变换。
3.关于painter.scale操作,他会发生和调整视口窗口映射同样的情况,即x和y轴scale的值相差较大的时候,图像也会发生变形。所以我们依旧在逻辑坐标系中处理放大缩小变化。(不知道是不是translate提供的操作本来就是在修改窗口视口映射)
4注意painter提供的图像移动操作是按照栈的方式存储的,记得变化的时候不要搞反。当时我在做折线的放大缩小和移动操作的时候把顺序搞反了,结果变得很诡异。
5总的来说,在处理2d图的时候,我个人习惯将图形变换操作(尤其是scale)在逻辑坐标系中实现,将其与窗口视口变换分离开来。