分类: C/C++
2014-04-23 10:41:14
视口---窗口机制对于我们编写独立于绘制设备大小和分辨率的代码是十分有用的,我们可以自己来进行逻辑坐标和物理坐标之间的映射计算,但是让QPAINTER来完成这项工作是很简单的。例如,我们想让逻辑坐标从(-50,-50)到(50,50),并且(0,0)在中间,我们可以这样来设置我们的窗口:
painter.setWindow(QRect(-50,-50,100,100));
(-50,-50)指定了原点,(100,100)指定了宽和高。这也就是说现在的逻辑坐标(-50,-50)和物理坐标(0,0)是对应的,并且逻辑坐标(50,50)和物理坐标(320,200)是对应的。
那么painter是怎么计算的呢?
这就要注意到一句话:逻辑坐标和物理坐标是成线性关系的。
因为物理坐标是和设备的分辨率有关的。对于这个设备,它的分辨率应该是320*200的。
那么应该如何计算逻辑坐标和物理坐标的映射关系呢?
我们来交叉对应坐标,对于X有:(-50,0)和(50,320)
所以对于X来说,逻辑坐标和物理坐标的映射关系就是:b=(16/5)a+160 这里的b是物理坐标的x,a是逻辑坐标的x
对于Y有:(-50,0)和(50,200)
所以对于Y来说,逻辑坐标和物理坐标的映射关系就是:b=2a+100 这里的b是物理坐标的y,a是逻辑坐标的y
根据上面的2个公式,我们任意给出逻辑坐标中的一个点就可以求出对应的物理坐标中的点。
例如逻辑坐标(-30,-20)对应于物理坐标就是(64,60);逻辑坐标(10,20)对应于物理坐标就是(192,140)。