首页 > 其他分享 >Qt 视口和窗口

Qt 视口和窗口

时间:2025-01-13 09:30:50浏览次数:3  
标签:窗口 Qt 视口 绘图 坐标 矩形 painter

一、概述:
1、绘图设备的物理坐标,是最基本的坐标系,原点(0, 0)在左上角,x轴正方向水平向右,y轴正方向竖直向下,单位是像素。


2、视口(Viewport)表示绘图设备的任意一个矩形区域,视口可以让我们只在关心的区域绘图。 定义视口用的是物理坐标,默认情况下视口等于绘图设备的整个矩形区。


3、窗口(Window)和视口是同一个矩形区域,但是窗口使用逻辑坐标系,可以任意指定矩形区域的逻辑坐标范围,长和宽的变化比例不相同也是可以的,窗口坐标原点也可以任意指定。 
    (1)、默认情况下,窗口坐标范围和视口坐标范围相等,窗口坐标原点在视口左上角,x轴正方向水平向右,y轴正方向竖直向下。
    (2)、使用窗口坐标的优点是,只需按窗口的逻辑坐标来绘图,不用管实际的物理坐标范围,并且当视口大小变化时,绘制的图形也会自动变化大小,这样可以将绘图功能与绘图设备隔离,使得绘图功能适用于不同大小、不同类型的设备。


4、QPainter的平移、旋转、缩放,还可以将窗口坐标系变换,得到更容易操作的逻辑坐标。


5、QPainter内部的坐标变换矩阵,自动会将逻辑坐标转换为绘图设备的物理坐标。


二、接口说明:
1、假设绘图设备,宽度300像素,高度200像素。


2、painter.setViewport(50, 0, 200, 200):
     表示将绘图设备物理坐标系统的(50, 0)点作为视口的左上角点,取宽度200像素、高度200像素的一个矩形区域,作为视口区域。


3、painter.setWindow(-50, -50, 100, 100):
    (1)、窗口区域和视口区域是同一个矩形区域。
    (2)、矩形区域的窗口坐标范围(逻辑坐标范围)是宽100、高100,矩形区域左上角点的窗口坐标(逻辑坐标)是(-50, -50),所以这个窗口坐标的原点(0, 0)是在矩形区域的中心。


4、painter.setWindow(0, 0, 200, 100):
    (1)、窗口区域和视口区域是同一个矩形区域。
    (2)、矩形区域的窗口坐标范围(逻辑坐标范围)是宽200、高100,矩形区域左上角点的窗口坐标(逻辑坐标)是(0, 0),所以这个窗口坐标的原点(0, 0)是在矩形区域的左上角。


三、示例代码:

void Widget::paintEvent(QPaintEvent * event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);

    int W = width();
    int H = height();
    int side = std::min(W, H);
    QRect rect((W - side) / 2, (H - side) / 2, side, side);
    painter.drawRect(rect);

    painter.setViewport(rect);
    painter.setWindow(-100, -100, 200, 200);

    QLinearGradient lineGradient(0, 0, 100, 0);
    lineGradient.setColorAt(0, Qt::yellow);
    lineGradient.setColorAt(1, Qt::red);
    lineGradient.setSpread(QGradient::PadSpread);
    painter.setBrush(QBrush(lineGradient));

    //设置复合模式,即后面绘制的图与前面绘制的图的叠加模式。
    painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);

    for(int i = 0; i < 36; i++)
    {
        painter.drawEllipse(QPoint(50, 0), 50, 50);
        painter.rotate(10);
    }
}


 

标签:窗口,Qt,视口,绘图,坐标,矩形,painter
From: https://blog.csdn.net/weixin_44629261/article/details/145106091

相关文章

  • Qt 自定义控件(Qt绘图)
    一、QPaintEvent绘图事件1、QPaintEvent是Qt框架中一个重要的事件类,专门用于处理绘图事件。2、当Qt视图组件需要重绘自己的一部分时,就会产生QPaintEvent事件。3、Qt视图组件重绘自己,通常发生在以下情况: (1)、窗口第一次显示时:当窗口或控件第一次出现在屏幕上时,系统会生......
  • 算法-查找滑动窗口中的最大值-Go(滑动窗口)
    题目给定一个长度为n的数组num和滑动窗口的大小size,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5};针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个:{[2,3,4],2,6,2,5,1},{......
  • 基于Qt/C++二维码生成器(附工程源码链接)
    简介本项目是一个基于C++和Qt框架开发的二维码生成器。它通过简单的用户交互,能够快速生成二维码图像并显示在用户界面上。以下将从代码结构、实现逻辑和功能扩展等方面对该项目进行详细讲解,便于集成到其他程序中。项目代码结构项目的主要文件包括以下内容:qrcodewidg......
  • 实现windows下简单的自动化窗口管理
    转载或者引用本文内容请注明来源及原作者一、问题描述用户的应用场景非常简单:一个无主播的线上弹幕游戏,需要定时开启和关闭直播,直播平台是在Windows端的某播伴侣。二、分析需求首先需要定时任务管理。在特定的时间进行应用的管理,并且能够支持用户进行修改其次需要在对应......
  • PyQt5入门级超详细教程中篇
    PyQt5入门级超详细教程中篇:信号槽机制与表格数据展示接上篇:第4部分:事件处理与信号槽机制4.1什么是信号与槽?在PyQt5中,信号(Signal)和槽(Slot)是处理事件和交互的核心机制。信号代表某个事件的发生,而槽是信号触发后执行的函数。信号:信号是控件发出的消息,用来通知外界......
  • Qt异步实现事件的定时执行 - QTimer和QThread的联合使用
    引言在Qt开发中,异步定时执行事件是常见需求。为了提高应用程序的响应能力和性能,合理使用QTimer和QThread可以实现高效的异步定时任务。本文将详细介绍如何在Qt中通过QTimer和QThread的联合使用,实现异步事件的定时执行。QTimer简介QTimer是Qt中用于定时操作的类。它可以在指定的......
  • matlab指令窗口功能
    指令窗口的基本功能   下面对指令窗口的七种功能各举一些简单的例子。1.1数值计算>>A=52,a=3                   %对A、a赋值,用逗号分割A=52a=3                                 %回车后显示结果,字母大小写有区......
  • 车道偏离预警(LDW)、车道保持辅助(LKA)、车道线检测-OpenCV、Python-滑动窗口、透视变
    车道偏离预警、车道保持辅助及车道线检测系统引言一、代码和文件1.项目文件说明2.项目的依赖包和环境3.运行代码二、整体代码逻辑1.相机校准2.车道检测/跟踪3.车道状态分析4.车道映射三、相机校准1.计算摄像机矩阵和失真系数四、图像和视频的处理步骤1.进行......
  • Qt仿音乐播放器:数据库持久化
    一、铺垫本地的数据持久化选择的是SQLite;他的头文件及准备文件只有100兆左右;它形成的数据库通常只有几兆大小;适合于单片机嵌入式开发;而且Qt是支持SQLite的,也就是说,只需要在核心文件中加一个拓展名,就可以解决;二、套路#include<QSqlDatabase>        //头文件#incl......
  • docker安装eclipse-mosquito测试mqtt
    拉取镜像dockerpulleclipse-mosquitto创建目录mkdirmqttcdmqttmkdirconfigmkdirdatamkdirlog创建配置文件cdmqtt/configtouchmosquitto.conftouchpasswdvimmosquitto.conf点击查看代码listener1883persistencetruepersistence_location/mo......