当前位置:   article > 正文

QT绘图:视口与窗口_视口和窗口

视口和窗口

目录

一、视口与窗口定义:

二、示例代码:

三、总结:


一、视口与窗口定义:

1、视口:表示绘图设备的任意一个矩形区域的物理坐标,可以选取物理坐标的一个矩形区域用于绘图。

2、窗口:窗口与视口是同一个矩形,只不过是用逻辑坐标定义的坐标系。

根据定义很难看出其中的关系,通过例子可以很好的表明之间关系。

二、示例代码:

  1. int width=this->width();
  2. int hight=this->height();
  3. painter.drawRect(width/4,hight/4,hight/2,hight/2);
  4. painter.setViewport(width/4,hight/4,hight/2,hight/2);
  5. painter.setWindow(-100,-100,200,200);
  6. QRect rect(0,0,100,100);
  7. 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)点决定图形显示的位置,只要计算出想要的窗口图形与视口左上角顶点的重合坐标进行设置,就可让图形在对应位置开始绘制。

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/465499
推荐阅读
相关标签
  

闽ICP备14008679号