赞
踩
目录
1、视口:表示绘图设备的任意一个矩形区域的物理坐标,可以选取物理坐标的一个矩形区域用于绘图。
2、窗口:窗口与视口是同一个矩形,只不过是用逻辑坐标定义的坐标系。
根据定义很难看出其中的关系,通过例子可以很好的表明之间关系。
- int width=this->width();
- int hight=this->height();
- painter.drawRect(width/4,hight/4,hight/2,hight/2);
- painter.setViewport(width/4,hight/4,hight/2,hight/2);
- painter.setWindow(-100,-100,200,200);
- QRect rect(0,0,100,100);
- painter.drawRect(rect);
1、首先,视口函数:setViewport(width/4,height()/4,hight/2,hight/2)函数的意思是:选取坐标在(width/4,height()/4)的边长为hight/2的正方形作为绘图区。但是注意,这四个参数都不是用常量写死的,而是根据窗口的长度和宽度计算的,也就是绘图区大小可以根据窗口大小变化,写死的话会在窗口缩小时遮盖。
2、其次,窗口函数:setWindow(-100,-100,200,200);这个参数是我们自己定义的坐标系,绘图在该坐标系上,前两个参数会与视口坐标前两个参数重合,相当于(-100,-100)与(width/4,hight/4)重合,斜对向的顶点也重合,这样的话,窗口的(0,0)与视口的中心是重合的。绘制图形的时候会在视口中心开始绘制。
3、当我们绘制rect(0,0,100,100)时,顶点在(0,0),也就是在视口中心开始绘制边长为100的正方形。
可以看出:
篮色框是视口边框,绘制的窗口图形从视口的中心开始画的,在上面我们知道窗口的(0,0)点就是视口中心。所以,我们画rect(0,0,100,100)图形时就是从视口中心画。
有人可能会想,我就想设置从视口左上角位置开始画,该如何定义窗口呢?
既然是从视口左上角开始画,就需要窗口的(0,0)点对应视口的左上角,我们又知道,setWindow(x,y,a,b)前两个参数正好对应视口左上角,所以,我们只要把setWindow(0,0,200,200)即可
如果还不满足,想在视口左边开始画,那该如何设置窗口?
我们知道,图形都是从窗口的(0,0)位置开始画,所以正方形左边顶点为(0,0),绘制的正方形边长为100,那么正方形右上角坐标(100,0),它与视口左上角重合,所以,(100,0)就是窗口函数设置的前两个参数。setWindow(100,0,200,200);
1、视口主要是为了让图形在哪个位置显示提供一个参照,但并不能决定位置
2、窗口是以视口为参照物,决定相对在哪个视口位置显示。
3、窗口的坐标(0,0)点决定图形显示的位置,只要计算出想要的窗口图形与视口左上角顶点的重合坐标进行设置,就可让图形在对应位置开始绘制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。