Qt窗口与视口坐标转换
2014-03-24 22:03
302 查看
为什么使用这两个概念?
为了让在逻辑坐标下自己作的图,在窗口大小变换时能自动适应,而不用去管窗体目前(物理上)是多大的。概念区别
我们先要明白视口和窗口,物理坐标和逻辑坐标的概念,所谓视口与其物理坐标 ,就是指在屏幕上的看到的实际的一个个像素和其坐标,而所谓窗口和逻辑坐标,就是指我们指定了一个这个窗体的坐标系,在这个坐标系内做的东西是先在其内画好,在转换到物理坐标系内去。本来物理坐标和逻辑坐标显然是一样的,除非你调用了setWindow方法去设置了逻辑坐标。相关描述
在QPainter中存在setWindow和setViewPort,分别用来设置绘图窗口和绘图的视口。首先要说明的是,这个窗口和视口和可能和其它地方说明的窗口和视口含义不一样,把相关知识描述如下:
以在QWidget中绘图为例,QWidget大小(600,600)。Qt绘图时,如果不显式的指定窗口和视口,默认的窗口和视口都是(0,0,widget.width(),widget.height())。那么窗口-视口变换过程中的线性关系是X’ = X;Y’ = Y;其中(X,Y)是窗口中的坐标,(X’,Y’)是视口中的坐标。那么此时绘制的图形是以一个不变的关系绘制在QWidget上,没有任何的平移等效果。
如果使用setWindow(-300,-300,600,600)和setViewPort(-100,-100,600,600)之后呢,那么这个窗口-视口的线性关系则需要重新计算了,怎么计算?
设X’=aX+b;Y’=cY+d; 那么需要确定参数a,b,c,d。如何确定?
使用窗口坐标和视口坐标进行计算,在窗口(-300,-300,600,600)中,实际上是指定了窗口的两个坐标,左上角(-300,-300),右下角(300,300);在视口(-100,-100,600,600)中,指定了视口左上角坐标(-100,-100),视口右下角(500,500).根据左上角对应左上角,右下角对应右下角的关系,得到:x方向上有:-100=-300a+b,500=300a+b,解得a=1,b=200;y方向有:-100=-300c+d,500=300c+d,解得c=1,d=200。得到关系后再来绘图则是经过该关系变换后的值了。
比如painter.drawPoint(0,10),对应x=0,得到x’=0*a+b=200;对应y=10,得到y’=10*c+d=210;即实际上是在widget的(200,210)处绘制了一个点。
以上即是QPainter窗口-视口机制的具体计算过程。
相关文章推荐
- windows GDI编程中关于窗口和视口,逻辑坐标和设备坐标的转换
- QT中窗口-与视口的转换
- Qt中坐标:窗口坐标,视口坐标
- 设备坐标和逻辑坐标(窗口、视口)
- Qt视频学习笔记4(坐标系统 、内存回收、菜单栏、工具栏、核心控件和浮动窗口)
- QT窗口与视口(window&ViewPort)的关系,言简意赅的表达。
- 窗口坐标,逻辑坐标与视口坐标,设备坐标的区别
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- VTK屏幕坐标与世界坐标转换(Qt)
- 窗口坐标与地图坐标的转换
- 逻辑坐标,设备坐标,窗口,视口
- Qt二维图形编程之窗口-视口概念理解
- 逻辑坐标(窗口) 设备坐标(视口)
- VC++中屏幕坐标与窗口坐标的转换
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- 使用 PyQt 转换网页到 PDF(使用QtWebKit加载完毕后,打印整个窗口就行了,真简单!)
- qt窗口坐标
- windows 屏幕坐标 窗口坐标 客户区坐标 逻辑坐标 设备坐标之间的关系及转换
- 逻辑坐标,设备坐标,窗口,视口
- qt viewport window 视口 窗口