Chinaunix首页 | 论坛 | 博客
  • 博客访问: 108650
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 636
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-22 19:31
文章分类

全部博文(87)

文章存档

2015年(33)

2014年(37)

2013年(17)

我的朋友

分类: 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)。

阅读(580) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~