当前位置: 首页 > news >正文

Qt-QTransform介绍与使用

QTransform是一个用于二维坐标系转换的类。我们知道Qt的坐标系是左上角为原点,x轴向右,y轴向下,屏幕上每个像素代表一个单位,那么,如果我们想要在屏幕上建立自己的坐标系用于绘制,就需要借助QTransform。
在这里插入图片描述
假设我们希望建立的原点坐标在Qt坐标系中为(50,250),并且y轴方向相反,且原x轴一个单位等于现x轴的2个单位,原y轴的2个单位等于现y轴的1个单位,我们可以这样做:

QTransform trans;
trans.translate(50, 250);

translate函数将坐标系向x轴移动50个单位,y轴移动250个单位

qreal xRatio = (qreal)1/2;
qreal yRatio = -(qreal)2/1;
trans.scale(xRatio, yRatio);

scale函数将xy轴放大缩小,比例值为Qt像素值/自定义坐标像素值,1/2表示,1一个原单位值等于现在2个单位值,其中负数表示改变y轴为原来相反方向。测试一下绘制效果

void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);QPen pen(Qt::blue, 2);painter.setPen(pen);painter.drawLine(QPoint(-100, 0), QPoint(1000, 0));painter.drawLine(QPoint(0, -100), QPoint(0, 1000));QTransform trans;trans.translate(50, 250);qreal xRatio = (qreal)1/2;qreal yRatio = -(qreal)2/1;trans.scale(xRatio, yRatio);painter.setTransform(trans);pen.setBrush(Qt::darkGreen);painter.setPen(pen);painter.drawLine(QPoint(-100, 0), QPoint(1000, 0));painter.drawLine(QPoint(0, -100), QPoint(0, 1000));pen.setBrush(Qt::darkBlue);painter.setPen(pen);painter.drawRect(0, 0, 50, 50);
}

在这里插入图片描述
可以看到Qt坐标系(红),自定义坐标系(绿)和自定义坐标系中绘制的矩形,实际为25*100的矩形,且可以发现penWidth宽度在y轴也发生了放大变为4px,x轴penWidth变为1px

相关文章:

  • 机器学习算法---回归
  • Linux Java Jar Shell 脚本
  • 使用 React 实现自定义数据展示日历组件
  • 《Linux C编程实战》笔记:进程操作之退出,执行,等待
  • SQL进阶理论篇(十二):InnoDB中的MVCC是如何实现的?
  • 基于点云去滤除灰尘的滤波算法调研
  • nlp与cv的发展
  • OpenCV技术应用(7)— 将图像转为热力图
  • 用23种设计模式打造一个cocos creator的游戏框架----(二十)解析器模式
  • 【LeetCode刷题笔记】155.最小栈
  • 减速机振动相关标准 - 笔记
  • 鸿蒙HarmonyOS开发用什么语言
  • Python之PyCharm开发工具的安装与设置
  • for命令语句
  • 持久化存储 StorageClass
  • @jsonView过滤属性
  • [Vue CLI 3] 配置解析之 css.extract
  • Android框架之Volley
  • Debian下无root权限使用Python访问Oracle
  • Django 博客开发教程 8 - 博客文章详情页
  • dva中组件的懒加载
  • ES6--对象的扩展
  • github从入门到放弃(1)
  • input实现文字超出省略号功能
  • JAVA并发编程--1.基础概念
  • linux安装openssl、swoole等扩展的具体步骤
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 飞驰在Mesos的涡轮引擎上
  • 前端存储 - localStorage
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 树莓派 - 使用须知
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  •  一套莫尔斯电报听写、翻译系统
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 如何正确理解,内页权重高于首页?
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #100天计划# 2013年9月29日
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #pragma data_seg 共享数据区(转)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (转)ObjectiveC 深浅拷贝学习
  • (转)Oracle 9i 数据库设计指引全集(1)
  • (转)菜鸟学数据库(三)——存储过程
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .net 7 上传文件踩坑
  • .NET CLR Hosting 简介