• Qt 视口和窗口的区别


    视口和窗口

    绘图设备的物理坐标是基本的坐标系,通过QPainter的平移、旋转等变换可以得到更容易操作的逻辑坐标

    为了实现更方便的坐标,QPainter还提供了视口(Viewport)窗口(Window)坐标系,通过QPainter内部的坐标变换矩阵自动转换为绘图设备的物理坐标

    视口表示绘图设备的任意一个矩形区域的物理坐标,可以只选取物理坐标的一个矩形区域用于绘图。默认情况下,视口等于绘图设备的整个矩形区

    窗口与视口是同一个矩形,只不过是用逻辑坐标定义的坐标系。窗口可以直接定义矩形区的逻辑坐标范围

    • 不添加视口与窗口
    #include "widget.h"
    #include "ui_widget.h"
    
    Widget::Widget(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::Widget)
    {
        ui->setupUi(this);
    }
    
    Widget::~Widget()
    {
        delete ui;
    }
    
    void Widget::paintEvent(QPaintEvent* event){
        QPainter painter(this);
        int width = this->width();
        int height = this->height();
        QRect rect(width/4,height/4,width/2,height/2);
    
        // painter.setViewport(width/2,height/2,width/2,height/2);
        // painter.setWindow(width/2,height/2,width,height);
    
        QPen pen;
        pen.setWidth(3);
        pen.setColor(Qt::blue);
        pen.setStyle(Qt::SolidLine);
        pen.setCapStyle(Qt::FlatCap);
        pen.setJoinStyle(Qt::BevelJoin);
        painter.setPen(pen);
    
        QBrush brush;
        brush.setColor(Qt::green);
        brush.setStyle(Qt::SolidPattern);
        painter.setBrush(brush);
    
        painter.drawRect(rect);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    在这里插入图片描述

    • 添加视口

    在这里插入图片描述

    选择右下角四分之一区域作为视口

    painter.setViewport(width/2,height/2,width/2,height/2);
    
    • 1

    在这里插入图片描述

    • 添加窗口

    在这里插入图片描述

    painter.setWindow(-width/2,-height/2,width,height);
    
    • 1

    在这里插入图片描述

    更改窗口大小

    painter.setWindow(-width/2,-height/2,width/2,height/2);
    
    • 1

    在这里插入图片描述

    这里思考一下窗口的起点坐标和窗口的大小,自然明白此处为什么不显示矩形

    💡 视口与窗口实际上是同一区域,视口使用的是物理坐标,窗口使用的是逻辑坐标

    使用窗口坐标的优点是,只需按照窗口坐标定义来绘图,而不用管实际的物理坐标范围的大小。例如在一个固定边长为100的正方形窗口内绘图,当实际绘图设备大小变化时,绘制的图形会自动变化大小。这样,就可以将绘图功能与绘图设备隔离开来,使得绘图功能适用于不同大小、不同类型的设备

  • 相关阅读:
    el-input输入框涉及到scope的校验问题
    Python 编程基础 | 第一章-预备知识 | 1.1、Python简介
    锂电回收行业硫酸镍溶液除硅
    强化学习基础(1)- 理论和算法
    pytorch3d安装遇到的一些坑和解决过程
    coredns无法启动
    [COCI2013-2014#5] LOZINKA
    OSCP证书与终身学习
    动作捕捉系统用于室内组合定位技术研究
    Zookeeper 面试题
  • 原文地址:https://blog.csdn.net/Solititude/article/details/133850904