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…

C++ unordered_multimap用法总结

std::unordered_multimap 是 C 标准模板库中的一种无序关联容器&#xff0c;它允许存储相同键的多个副本&#xff0c;并提供高效的插入、查找和删除操作。以下是 std::unordered_multimap 的用法总结&#xff1a; 包含头文件&#xff1a; #include <unordered_map>创建…

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()浮点数四舍五入…

C++(20):普通函数的参数使用auto声明

C++20进一步解放了对auto的使用,可以在函数的参数中使用auto,auto&, auto&& 并且类型推导的规则与C++11中是一致的 C++(11):auto通过初始化类型推导变量类型_auto如何实现自动推导变量的类型-CSDN博客 #include <vector> #include <iostream> #inc…

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

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

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

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

只有人性才是世间的真相

一、少喝鸡汤&#xff0c;多研究人性&#xff0c;因为只有人性才是世间的真相。 从现在开始&#xff0c;你要反自己的人性&#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; // 指向下一个节点的指针 };// 定…

L1-022 奇偶分家(Java)

给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输出格式&#xff1a; 在一行中先后输出奇数的个数、偶数的个…

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;提供了…

学习之路 会有很多失败

大家知道 pyhackrf 连一个示例写法都没有 我已经很努力了 努力得到了回报 终于让pyhackrf 正常工作了 发送后波形已经正常 非常感谢大家的鼓励和支持 谢谢大家点赞 我会继续下去 把那些隐藏在软件内的秘密一一的挖出来 让大家也能学到

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…