QT绘图:视口与窗口

目录

一、视口与窗口定义:

二、示例代码:

三、总结:


一、视口与窗口定义:

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)点决定图形显示的位置,只要计算出想要的窗口图形与视口左上角顶点的重合坐标进行设置,就可让图形在对应位置开始绘制。

 

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值