2D绘图--视口窗口setViewport setWindow

目录

1 setViewport setWindow

2 示例

3 实际应用(个人理解)

4 总结


1 setViewport setWindow

        在Qt中,QPaintersetViewport()方法用于定义绘图区域在窗口坐标系中的可视部分。

QPainter::setWindow() 是 Qt 库中 QPainter 类的一个方法,用于定义绘图区域的大小和位置。

setViewport()setWindow()方法一起使用,以控制绘图的缩放和裁剪。

        可以通过先设置视口,再设置对应的窗口的方法,来确保我们的代码在标准的想象中的坐标

系中绘制的图形,可以准确地显示在不同的绘图设备界面上。

2 示例
void MainWindow::paintEvent(QPaintEvent *)
{QPainter painter(this);int width = this->width();int hight = this->height();int view_x = width / 4;int view_y = hight / 4;int side = hight / 2;qDebug()<<"width:"<<width<<"hight:"<<hight;qDebug()<<"view_x:"<<view_x<<"view_y:"<<view_y<<"side:"<<side;painter.setPen(Qt::black);painter.drawRect(view_x,view_y,side,side);painter.setViewport(view_x,view_y,side,side);painter.setWindow(-100,-100,200,200);painter.setPen(Qt::red);QBrush brush(Qt::red);painter.setBrush(brush);painter.drawRect(0,0,100,100);}

执行结果:

 代码说明:

        打印输出

width: 400 hight: 300
view_x: 100 view_y: 75 side: 150

(1)painter.setViewport(view_x,view_y,side,side);

用于定义绘图区域的大小和位置 实际值为painter.setViewport(100,75,150,150);

        即起点(100,75)长宽150的绘图区域 

为方便观察 painter.drawRect(view_x,view_y,side,side);绘制出了这一区域 即黑色方框

(2)painter.setWindow(-100,-100,200,200);定义你想要绘制的大小。

        具体来说 是有一个映射关系 即点(-100,-100)与视口的(0,0)点对应就是黑色方框的左

上角,宽和长也和视口一一映射对应,有一定的比例关系

        所以绘图时计算设置的setWindow窗口坐标就行 窗口黑色方框左上角(-100,-100),右下角(100,100)

        此时painter.drawRect(0,0,100,100);的起始点(0,0)就对应的是窗口的中心 绘制出来如上图所示

(3)如果想在方框的右上角开始画

painter.setWindow(-200,0,200,200);

        此时方框的右上角坐标就是(0,0)

(也可以保持painter.setWindow(-100,-100,200,200)不变,改变绘制坐标painter.drawRect(100,-100,100,100)也是一样的效果)

绘制如下

3 实际应用(个人理解)

比如代码如下

void MainWindow::paintEvent(QPaintEvent *)
{//我的初始窗口的大小width=400 hight=300QPainter painter(this);int width = this->width();int hight = this->height();painter.setPen(Qt::black);painter.drawRect(0,0,width,hight);painter.setViewport(0,0,width,hight);painter.setWindow(0,0,400,300);painter.setPen(Qt::red);QBrush brush(Qt::red);painter.setBrush(brush);painter.drawRect(0,0,200,150);}

我绘制了1/4大小的红色矩形,无论窗口怎样变化,红色矩形始终占了窗口的 1/4,这里的窗口可以

模拟为设备,即在不同屏幕大小的设备上所占的比例不变。

4 总结

(1)视口定义显示区域,和setWindow窗口有一定的映射关系,设置好窗口的坐标系后,后续绘

制就按照窗口坐标系绘制即可

(2)可以通过先设置视口,再设置对应的窗口的方法,可以准确地显示在不同的绘图设备界面上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/616693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据库创建表并插入数据练习题

一、创建表的要求 创建一个英雄表(hero) 主键 name nickname address groups email telphone 二、 操作步骤 1.登录MySQL [rootlocalhost ~]# systemctl start mysqld [rootlocalhost ~]# mysql -uroot -p Enter password: Welcome to the MySQL monitor. Commands end with…

NAND系统性能提升常见方案

随着NAND的发展&#xff0c;针对NAND系统性能提升&#xff0c;业内目前主要的做法有以下几种方案&#xff1a; 1.提升总线频率和优化AC时序&#xff1a; 提高NAND闪存接口的工作频率可以显著加快数据传输速度。通过不断改进工艺和技术&#xff0c;缩短了信号稳定时间、降低了延…

工程师职称申报业绩是如何要求的?

无论是初级职称还是中级职称或是高级职称&#xff0c;评审的重要条件之一就是相关的业绩证明。 一、个人业绩&#xff0c;比如你做过哪些与本专业相关的业绩证明&#xff0c;像工程类的职称&#xff0c;你的业绩证明就包括中标通知书、竣工验收报告&#xff0c;或是你参与工程建…

php 的数学常用函数

目录 1.常用列表 2.代码示例 1.常用列表 函数名描述输入输出abs()求绝对值数字绝对值数字ceil()进一法取整浮点数进一取整floor()舍去法求整浮点数直接舍去小数部分fmod()浮点数取余 两个浮点 数,x>y 浮点余数 pow()返回数的n次方基础数n次方乘方值round()浮点数四舍五入…

区块链是怎么存储数据的?

每个块都是有大小限制的新的数据存储单元&#xff0c;当前数据不到上限&#xff0c;那么都可以添加进块。当前数据达到了上限&#xff0c;那么就得分表/分块&#xff0c;超限的那部分数据就需要等待下个区块存储 存储的数据&#xff1a;和mysql一样&#xff0c;文本数据直接存储…

Python 全栈体系【四阶】(十二)

第四章 机器学习 十五、朴素贝叶斯 朴素贝叶斯是一组功能强大且易于训练的分类器&#xff0c;它使用贝叶斯定理来确定给定一组条件的结果的概率&#xff0c;“朴素”的含义是指所给定的条件都能独立存在和发生。朴素贝叶斯是多用途分类器&#xff0c;能在很多不同的情景下找到…

完整的模型验证套路

读取图片 from PIL import Imageimg_path "../Yennefer_of_Vengerberg.jpg" image Image.open(img_path) print(image)转换成灰度图&#xff08;可选&#xff09; image image.convert(L) image.show()转换成RGB格式 image image.convert(RGB)因为png格式是四…

基础数据结构之堆栈

堆栈的定义、入栈、出栈、查询栈顶 #include <stdio.h> #include <stdlib.h>typedef int DataType;// 定义栈节点结构体 struct StackNode;struct StackNode {DataType data; // 节点数据struct StackNode* next; // 指向下一个节点的指针 };// 定…

SpringMVC ResponseEntity常见使用场景

ResponseEntity 作为 Spring MVC controller层 的 HTTP response&#xff0c;包含 status code, headers, body 这三部分。 正常场景 RestController Slf4j public class SearchController {AutowiredUserService userService;RequestMapping(value "/getAllStudents4&…

Mixtral 8X7B MoE模型基于PAI的微调部署实践

作者&#xff1a;熊兮、求伯、一耘 引言 Mixtral 8x7B 是Mixtral AI最新发布的大语言模型&#xff0c;在许多基准测试上表现优于 GPT-3.5&#xff0c;是当前最为先进的开源大语言模型之一。阿里云人工智能平台PAI是面向开发者和企业的机器学习/深度学习平台&#xff0c;提供了…

FAST OS DOCKER 可视化Docker管理工具

介绍 FAST OS DOCKER 界面直观、简洁&#xff0c;非常适合新手使用&#xff0c;方便大家轻松上手 docker部署运行各类有趣的容器应用&#xff0c;同时 FAST OS DOCKER 为防止服务器负载过高&#xff0c;进行了底层性能优化&#xff1b;其以服务器安全为基础&#xff0c;对其进…

基于springboot+vue药店管理系统

摘要 药店管理系统的设计和应用在当前社会背景下具有巨大的实际意义和社会价值。随着医药行业的不断发展和社会健康水平的提高&#xff0c;药店作为医疗服务的一部分&#xff0c;其管理方式也需要不断创新与优化。该系统的研究不仅关系到单一药店的运营效率&#xff0c;更涉及到…

HBuilder/HBuilderX 运行APP

安装adb https://developer.android.com/tools/releases/platform-tools?hlzh-cn 配置环境变量 测试是否配置成功 adb version HBuilder/HBuilderX 配置路径 数据线连接手机 运行即可 未检测到设备排查 真机运行常见问题run | uni-app官网

多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测

多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测 目录 多维时序 | Matlab实现GRO-CNN-LSTM-Attention淘金算法优化卷积神经网络-长短期记忆网络结合注意力机制多变量时间序列预测效果一览基本介绍程序设…

Openstack组件glance对接swift

2、glance对接swift &#xff08;1&#xff09;可直接在数据库中查看镜像存放的位置、状态、id等信息 &#xff08;2&#xff09;修改glance-api的配置文件&#xff0c;实现对接swift存储&#xff08;配置文件在/etc/glance/glance-api.conf&#xff0c;建议先拷贝一份&#x…

每日一题——LeetCode1103.分糖果 ||

方法一 个人方法&#xff1a; 有多少人就创建多大的数组并把数组的所有元素初始化为0&#xff0c;只要还有糖果&#xff0c;就循环给数组从头到尾添加糖果&#xff0c;每次分的糖果数递增1&#xff0c;最后可能刚好分完也可能不够&#xff0c;不够就还剩多少给多少。 var dis…

麒麟操作系统缓存rpm包,制作离线yum源

缓存rpm包&#xff0c;以make为例 mkdir -p /data/yum yumdownloader --resolve --destdir/data/yum make制作离线yum包 yum install createrepo -y cd /data/yum createrepo .写yum配置文件/etc/yum.repos.d/local.repo [local-repo] namelocal-repo baseurlfile:///data/…

x-cmd pkg | pypinyi - 汉字拼音转换工具

目录 简介首次用户功能特点相关工具进一步探索 简介 pypinyin 是一个汉字拼音转换工具&#xff0c;支持多种词库&#xff0c;多种输出格式&#xff0c;支持自定义词组拼音库或单字拼音库。 首次用户 使用 x env use pypinyin 即可自动下载并使用 在终端运行 eval "$(cur…

freemarker导出word文件实现动态列合并

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

如何在Linux部署OpenGauss数据管理系统并实现固定公网地址访问

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试 前言 openGauss是一款开源关系型数据库管理系统&#xff0c;采用木兰宽松许可证v2发行。openGauss内核深度融合…