【Qt开发流程】之2D绘图2:坐标系统

概述

Qt的坐标系统由QPainter类控制。QPainter与QPaintDevice和QPaintEngine 类一起构成了Qt的绘画系统的基础。QPainter用于执行绘图操作,QPaintDevice是一个二维空间的抽象,可以使用QPainter在其上绘制,QPaintEngine 提供了QPainter用于在不同类型的设备上绘制的接口。
QPaintDevice类是可以被绘制的对象的基类:它的绘制能力由QWidget、QImage、QPixmap、QPicture和QOpenGLPaintDevice类继承。绘制设备的默认坐标系统的原点位于左上角。x值向右增加,y值向下增加。在基于像素的设备上,默认单位是一个像素,在打印机上是一个点(1/72英寸)。
逻辑QPainter坐标到物理QPaintDevice坐标的映射是由QPainter的变换矩阵、视口和“窗口”处理的。默认情况下,逻辑和物理坐标系统是一致的。QPainter还支持坐标转换(例如旋转和缩放)。

逻辑表示

一个图形的大小(宽度和高度)总是对应于它的数学模型,忽略渲染它的笔的宽度:
在这里插入图片描述

抗锯齿绘图

绘制时,像素渲染由QPainter::Antialiasing渲染提示控制。
RenderHint枚举用于指定QPainter的标志,这些标志可能被任何给定的引擎尊重,也可能不被尊重。QPainter::Antialiasing值表示引擎应该尽可能地消除图形的边缘,即通过使用不同的颜色强度平滑边缘。
当使用一个像素宽的笔渲染时,像素将被渲染到右边,并低于数学定义的点。例如:
在这里插入图片描述
当使用具有偶数像素的笔进行渲染时,像素将围绕数学定义的点对称地渲染,而使用具有奇数像素的笔进行渲染时,多余的像素将像在一个像素的情况下一样呈现在数学点的右侧和下方。如下面的QRectF图所示。
在这里插入图片描述
请注意,由于历史原因,QRect::right()和QRect::bottom()函数的返回值偏离了矩形的真正右下角。
QRect的right()函数返回left() + width() - 1, bottom()函数返回top() + height() - 1。图中右下角的绿色点表示这些函数的返回坐标。
因此,可以使用QRectF来代替:QRectF类使用浮点坐标在平面中定义一个矩形以保证精度(QRect使用整数坐标),并且QRectF::right()和QRectF::bottom()函数返回真正的右下角。
或者,使用QRect,应用x() + width()和y() + height()来查找右下角,并避免使用right()和bottom()函数。

如果设置了QPainter的抗锯齿渲染提示,像素将在数学定义的点的两边对称地渲染:
在这里插入图片描述

坐标变换

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

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

相关文章

java--Stream流常见的中间方法和终结方法

1.Stream流常见的中间方法 中间方法指的是调用完成后会返回新的Stream流,可以继续使用(支持链式编程) 2.Stream流常见的终结方法 ①终结方法指的是调用完成后,不会返回新Stream了,没法继续使用流了。 ②收集Stream流:就是把Stre…

MySQL执行流程_执行一条select语句,期间发生了什么

文章目录 执行一条select语句,期间发生了什么MySQL执行流程第一步:连接器第二步:查询缓存第三步:解析SQL第四步:执行SQL 执行一条select语句,期间发生了什么 MySQL执行流程 server层负责建立连接、分析和执…

SpringAMQP

目录 利用SpringAMQP实现HelloWorld中的基础消息队列功能: 1.在父工程中引入spring-amqp的依赖 2.在publisher服务中利用RabbitTemplate发送消息到simple.queue这个队列 3.在consumer服务中编写消费逻辑,绑定simple.queue这个…

Python Bokeh库详解:交互式数据可视化

更多资料获取 📚 个人网站:ipengtao.com 数据可视化在数据分析和科学研究中起着至关重要的作用。而Bokeh(发音为“bo-kay”)是一个强大的Python交互式可视化库,提供了丰富的工具和功能,使得创建交互式、吸…

西工大网络空间安全学院计算机系统基础实验二(phase_3,phase_4,phase_5)

大家千万不要着急,不要慌张,即使自己并不了解多少汇编代码的知识,即使自己计基课上的基础知识学的并不扎实,也都不要紧,因为这次计基实验考察的重点并不是基础知识,而是对gdb工具的掌握,以及心细…

基于.NET Core + Quartz.NET+ Vue + IView开箱即用的定时任务UI

前言 定时任务调度应该是平时业务开发中比较常见的需求,比如说微信文章定时发布、定时更新某一个业务状态、定时删除一些冗余数据等等。今天给大家推荐一个基于.NET Core Quartz.NET Vue IView开箱即用的定时任务UI(不依赖数据库,只需在界面做简单配…

Spring Boot学习随笔- 集成JSP模板(配置视图解析器)、整合Mybatis(@MapperScan注解的使用)

学习视频&#xff1a;【编程不良人】2021年SpringBoot最新最全教程 第五章、JSP模板集成 5.1 引入JSP依赖 <!--引入jsp解析依赖--> <!--C标签库--> <dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version&…

第二十一章网络通信

网络程序设计基础 局域网与互联网 为了实现两台计算机的通信&#xff0c;必须用一个网络线路连接两台计算机。如下图所示 网络协议 1.IP协议 IP是Internet Protocol的简称&#xff0c;是一种网络协议。Internet 网络采用的协议是TCP/IP协议&#xff0c;其全称是Transmissio…

java系列-LinkedHashMap

1.插入新节点时&#xff0c;会将该节点加到链表尾部 public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>{/*** The head (eldest) of the doubly linked list.*/transient LinkedHashMapEntry<K,V> head;/*** The tail (young…

【小红书运营指南2】小红书自律标签的达人分解

小红书标签的达人分解 写在最前面11.27初步想法达人分析 标签拆解&#xff08;速览版&#xff09;分析应用 思路 相关标签拆解&#xff08;详细版&#xff09;11、职场-职场干货 文化薯&#xff08;创业&#xff0c;也是专注知识付费&#xff0c;可以对标学习&#xff09;笔记画…

用modelbox server启动流程图,暴露Restful接口

背景 假设你已经搭建了modelbox开发容器&#xff0c;能够使用webUI构建流程图。如果没有请参考昇腾npu上构建modelbox webUI开发容器教程。 现在&#xff0c;本文会说明&#xff0c;如何在终端用命令的方式将流程图暴露为服务&#xff0c;并能够在本地用postman访问。 本文参…

华为OD机试三(完全二叉树部分后续遍历、猜密码、五子棋谜)

1. 完全二叉树部分后续遍历 题目表述&#xff1a;输入&#xff1a; 1 2 3 4 5 6 7 输出&#xff1a; 2 3 1 示例代码&#xff1a; # 测试数据 test_data [1,2,3,4,5,6,7] # 找出非叶子节点 new_list [] for i in test_data:left 2 * iright left 1if left in test_data…

使用 Webshell 访问 SQL Server 主机并利用 SSRS

RDS SQL Server提供Webshell功能&#xff0c;用户可以通过Web界面登录RDS SQL Server 实例的操作系统。通过Webshell&#xff0c;用户可以在RDS SQL Server实例上执行命令、上传和下载文件以及执行各种操作。Webshell 提供了一种方便高效的远程管理方法&#xff0c;尤其是在 SS…

如何使用nacos进行配置管理以及代码集成

首先需要在maven的pom文件中引入nacos-config依赖 <!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency> 在项目中添加boo…

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

第四章 机器学习 一、人工智能概述 1. 什么是人工智能 人工智能&#xff08;Artificial Intelligence&#xff09;是计算机科学的一个分支学科&#xff0c;主要研究用计算机模拟人的思考方式和行为方式&#xff0c;从而在某些领域代替人进行工作。 2. 人工智能的学科体系 …

输出网络结构图,mmdetection

控制台输入&#xff1a;python tools/train.py /home/yuan3080/桌面/detection_paper_6/mmdetection-master1/mmdetection-master_yanhuo/work_dirs/lad_r50_paa_r101_fpn_coco_1x/lad_r50_a_r101_fpn_coco_1x.py 这个是输出方法里面的&#xff0c;不是原始方法。 如下所示&a…

分层自动化测试的实战思考!

自动化测试的分层模型 自动化测试的分层模型&#xff0c;我们应该已经很熟悉了&#xff0c;按照分层测试理念&#xff0c;自动化测试的投入产出应该是一个金字塔模型。越是向下&#xff0c;投入/产出比就越高&#xff0c;但开展的难易程度/成本和技术要求就越高&#xff0c;但…

附录C 流水线:基础与中级概念

1. 引言 1.1 什么是流水线&#xff1f; 流水线爱是一种将多条指令重叠执行的实现技术&#xff0c;它利用了一条指令所需的多个操作之间的并行性。&#xff08;指令操作的非原子性和指令类型的多样性&#xff09; 在计算流水线中&#xff0c;每个步骤完成指令的一部分&#x…

Leetcode143 重排链表

重排链表 题解1 线性表 给定一个单链表 L 的头节点 head &#xff0c;单链表 L 表示为&#xff1a; L0 → L1 → … → Ln - 1 → Ln请将其重新排列后变为&#xff1a; L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → …不能只是单纯的改变节点内部的值&#xff0c;而是需要实际…