QT setWindow和setViewport的一些理解

参考书籍:《Qt5.9C++开发指南》

一直不理解书中这部分内容及代码:

设置窗口大小为400*400,在正中绘制一个矩形,此时视口和窗口默认重合,默认参数为:

    painter.setWindow(0, 0, 400, 400);//窗口
    painter.setViewport(0, 0, 400, 400);//视口
QPoint points[4] = {
    QPoint(100,100),
    QPoint(100,300),
    QPoint(300 ,300),
    QPoint(300,100),
    };

先来看setWindow();

painter.setWindow(-100, -100, 400, 400);//窗口

运行后结果:

可以看出显示窗口相对于图像整体向左平移100像素,向上平移100像素,窗口长宽保持为400,,因此图像出现在右下角。

可以认为setWindow改变的是窗口相对于图像的位置,但是放大缩小窗口时,由于窗口大小是固定的400,所以图像也会跟着变形,及窗口的样子不影响窗口的大小,是一种等比例变换。

接下来看setVIewport()

先说结论:setWindow和setViewport是一种线下映射关系,关系式如下:

X{}' = aX + b;

Y{}' = cY + d;

从关系是可以看出a、c控制缩放倍数,b、d控制偏移。

默认情况下窗口左上及右下坐标为(0,0)和(400,400),视口也是(0,0)和(400,400),代入解的a=1,c=1,b=0,d=0;

即不进行变换。

更改参数为

painter.setWindow(0, 0, 400, 400);//窗口
painter.setViewport(0, 0, 400, 200);//视口

显示效果为:

从显示效果看,显示效果在Y轴上压缩一半。

此时窗口左上和右下坐标为(0,0),(400,400)

视口左上和右下坐标为(0,0),(400,200)

带入方程解得:a=1,c=1/2,b=0,d=0;

即x方向上(width)比例保持不变,y方向上(height)变为原来1/2.

通过改变参数可以改变相应的显示效果。

参考::QT 窗口与视口(setWindow/setViewPort)的一些理解与整理 - 掘金 (juejin.cn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值