坐标的变换

news2024/12/23 17:30:17

在QPainter可以使用以下函数变换坐标:

QPainter::scale()缩放坐标系统
QPainter::rotate()顺时针旋转
QPainter::translate()平移
QPainter::shear()围绕原点来扭曲坐标系统

缩放 (QPainter::scale)

QPainter::scale(qreal sx,qreal sy)

  • sx   为   x轴的倍数
  • sy   为   y轴的倍数

放大:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.drawRect(100,100,100,100);
    painter.scale(2,2);//x,y翻2倍
    painter.drawRect(100,100,100,100);//相当于drawRect(200,200,200,200)
}

 缩小:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.drawRect(100,100,100,100);
    //painter.scale(2,2);//x,y放大2倍
    //painter.drawRect(100,100,100,100);//相当于drawRect(200,200,200,200)
    painter.scale(0.5,0.5);//x,y缩小2倍
    painter.drawRect(100,100,100,100);//相当于drawRect(50,50,50,50)
}

 注意:当使用多次scale时,它们是结合一起使用。

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.scale(2,2);//x,y放大2倍
    painter.scale(0.5,0.5);//x,y缩小2倍
    //相当于放大2倍 缩小2倍  相当于没变换
    painter.drawRect(100,100,100,100);//相当于drawRect(100,100,100,100)
}

 旋转(QPainter::rotate)

QPainter::rotate(qreal angle)

  • angle为角度
  • 以原点坐标

初始状态:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.drawRect(100,0,100,100);

}

 旋转30°

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.rotate(30);
    painter.drawRect(100,0,100,100);

}

 

 平移(QPainter::translate)

QPainter::translate(constQPointF&offset)

  • offset   x轴的增量和y轴的增量

初始状态: 

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.drawRect(100,0,100,100);

}

 

 平移:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.translate(100,100);//x坐标加100 y坐标加100
    painter.drawRect(100,0,100,100);
}

 

 切变坐标系(QPainter::shear)

QPainter::shear(qrealsh,qrealsv)

  • 按 (shsv) 切变坐标系
  • sh横向扭曲
  • sv纵向扭曲

初始状态:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.drawRect(100,0,100,100);

}

 扭曲坐标:

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    QPen pen(Qt::black);
    painter.setPen(pen);//设置笔
    painter.shear(0,1);//纵向扭曲
    painter.drawRect(100,0,100,100);
}

 

 

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

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

相关文章

[附源码]java毕业设计小超市进销存管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

fmllr--学习笔记

预备知识: 说话人自适应技术是利用特定说话人数据对说话人无关(Speaker Independent,SI)的码本进行改造,其目的是得到说话人自适应(SPeaker Adapted, SA)的码本来提升识别性能。在某个说话人的训练数据足够多的时候,针对当前说话人数据采用传…

m基于3GPP-LTE通信网络的认知家庭网络Cognitive-femtocell性能matlab仿真

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 本系统所涉及到的几个主要模块,具体有如下几个模块: A. Simulation Flow:仿真流程 B. Initialization:初始化 C. Mobility Model&…

【每日两题】day 01 组队竞赛 删除公共字符

链接:组队竞赛__牛客网 (nowcoder.com) 解题思路 该题目就是求所有队员水平的数组中的尽可能大的水平之和 因为每个队伍都是三个人,平均水平值肯定是排序后水平中间的值 import java.util.*;public class Main {public static void main(String[] ar…

VisualDrag低代码拖拽模板

目录背景技术&文档二开优化方案1. 优化侧边栏2. 优化图片插入3. 新增可插入画布的组件4. 解决组件鼠标默认事件冲突的问题数据保存对接&页面生成预览保存对接生成预览源码下载背景 接到一个需求做一个拖拽模板低代码生成界面(如上图)&#xff0c…

项目交付过程中,进度失控的原因有哪些?

在项目交付过程中,会出现项目交付的进度与计划有较大的偏差,导致这种偏差的原因往往是多种多样的,一般常见的引起进度延期的原因有哪些? 1、计划不清晰 项目开始前必须有个计划,工作思路必须事前理清。 项目经理最…

springboot+ssm大学生家教课程订购平台的设计与实现

制作一个大学生家教平台的设计与实现是非常必要的。本网站是借鉴其他人的开发基础上,用MySQL数据库和JSP定制了大学生家教平台的设计与实现。系统前台实现了用户注册、登录、学习课程、家教准则、通知公告、双减政策等功能,并且还可以修改密码、个人信息…

windows10复制文件需要管理员权限,复制需要管理员权限怎么办

在Windows10操作系统的电脑中,很多用户都遇到这样的问题:windows10复制文件需要管理员权限,很多用户都不知道该怎么解决这个问题。在本文中,我们写出了详细的解决方法,让你可以轻松复制文件,并且也修复了需…

SpringBoot中任务是什么/Quartz和SpringTask在Spring Boot中怎么使用/SpringBoot怎么给用户发邮件

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.5.2 任务 3.5.2.1 简述 定时任务是企业应用中常…

多种BCN点击试剂:1426827-79-3,endo BCN-PEG4-COOH,1841134-72-2

双环[6,1,0]壬炔 (BCN) (环丙烷环辛炔)可以通过无铜的点击化学与叠氮化物标记的分子或生物分子反应生成稳定的三氮唑连接。同样其可以和多种不同的基团进行连接,包括acid,NHS ester,amine等。西安凯新生物科技有限公司…

Oracle SQL执行计划操作(7)——排序相关操作

7. 排序相关操作 该类操作和SQL语句执行计划中的排序操作相关。根据不同的具体SQL语句及其他相关因素,如下各操作可能会出现于相关SQL语句的执行计划。 1)BUFFER SORT 在会话服务进程内存中对某个行源数据进行排序或其他相关操作,该操作最…

Vue高级篇--实现前后端分离

目录 一、安装Nodejs服务器 二、安装Npm 三、安装vue脚手架 四、使用vue脚手架搭建vue工程 五、vue工程安装需要的插件和依赖 六、安装前端的开发工具 七、使用webstorm打开vue工程 7.1 运行vue工程 八、src目录结构的介绍 一、安装Nodejs服务器 等价于我们java端的Tomcat服务…

聊聊自制的探索大全扑克牌

这是鼎叔的第四十篇原创文章。 行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本人专栏和微信公众号《敏捷测试转型》,大量原创思考文章陆续推出。 这是鼎叔的第四十篇原创文章。 行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注…

Oracle中ALTER TABLE的五种用法(一)

首发微信公众号:SQL数据库运维 原文链接:https://mp.weixin.qq.com/s?__bizMzI1NTQyNzg3MQ&mid2247485212&idx1&sn450e9e94fa709b5eeff0de371c62072b&chksmea37536cdd40da7a94e165ce4b4c6e70fb1360d51bed4b3566eee438b587fa231315d0a5a…

(必经点)局部优化达到全局最优的最短路径算法探讨

首先,存在无序的点集. 记. 再记初始路径为. 于是,我们称以下为一次变换: if |C[i]-C[i1]||C[i2]-C[i3]| > |C[i]-C[i2]||C[i1]-C[i3]| {swap(C[i1],C[i2]); } 需要注意的是. 最直观的就是如下的变换: 我们对C上的每一点&a…

论文阅读【3】Efficient Estimation of Word Representations in Vector Space

1.概述 1.1 论文相关 题目:基向量空间中词表示的有效估计(Efficient Estimation of Word Representations in Vector Space)发表时间:出版:原文地址:代码 1.2 动机 2.对比模型 2.1 NNLM(前…

表单控件绑定:checkbox表单绑定v-model

表单checkbox&#xff0c;绑定的v-model是一个布尔值&#xff0c;要么为true&#xff0c;要么为false&#xff1b;因为它是勾选&#xff0c;或者不勾选的形式&#xff1b;为true了就是勾选&#xff0c;为false了就是不勾选&#xff1b; 代码&#xff1a; <body><div …

Vue-cli3 通过配置 public 目录下的 config.js 和config.json 实现一次编译,修改生效

文章目录1.背景2.配置步骤3.小结1.背景 最近实施部门&#xff0c;有个需求就是研发人员通过vue 写完代码&#xff0c;yarn build 编译完成代码后&#xff0c;移交实施&#xff0c;通过修改public 文件夹下的 config 文件来实现修改&#xff0c;请求后台的 requestUrl 和 titil…

day10 分布式缓存

单机的 Redis 存在以下四大问题&#xff1a; 1、Redis持久化 Redis有两种持久化方案&#xff1a; RDB 持久化AOF 持久化 1.1、RDB 持久化 RDB 全称 Redis Database Backup file&#xff08;Redis数据备份文件&#xff09;&#xff0c;也被叫做 Redis 数据快照。简单来说就是把…

《500强高管谈VE》-面向STAKEHOLDERS东方企业的VM

文章出处&#xff1a;日本VE协会杂志文章翻译&#xff1a;泰泽项目部 关注泰泽&#xff1a;实现高利润企业 《500强高管谈VE》-面向STAKEHOLDERS东方企业的VM 作者&#xff1a;常务董事八木隆 本公司的日高工厂和丰浦工厂两个事业所获得了迈尔斯奖。这些都是支持企业活动的V…