Qt 之图形(转换)

作者: 一去、二三里
个人微信号: iwaleon
微信公众号: 高效程序员

QTransform 用于指定坐标系的 2D 转换 - 平移、缩放、扭曲(剪切)、旋转或投影坐标系。绘制图形时,通常会使用。

QTransform 与 QMatrix 不同之处在于,它是一个真正的 3x3 矩阵,允许视角转换,QTransform 的 toAffine() 方法允许将 QTransform 转换到 QMatrix。如果视角转换已在矩阵指定,则转换将导致数据丢失。

常用接口

  • translate(qreal dx, qreal dy):平移 - 对坐标系沿着 x 轴移动 dx、沿 y 轴移动 dy
  • scale(qreal sx, qreal sy):缩放 - 通过水平的 sx 和垂直的 sy 缩放坐标系
  • rotate(qreal angle, Qt::Axis axis = Qt::ZAxis):旋转 - 对指定的轴用给定的角度反时针旋转坐标系统
  • shear(qreal sh, qreal sv):扭曲 - 通过水平的 sh 和垂直的 sv 扭曲坐标系
  • reset():重置为单位矩阵

基本使用

先来看基本使用:

这里写图片描述

这里,我们在从坐标原点 (0, 0) 位置开始,大小为 150 * 150 的区域内,绘制了一张图片。

void MainWindow::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter painter(this);// 反走样painter.setRenderHint(QPainter::Antialiasing, true);painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

平移

translate() 可将坐标原点变更为指定的坐标点 (x, y)。

这里写图片描述

这里,将坐标原点由 (0, 0) 变为 (120, 20)。

void MainWindow::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter painter(this);// 反走样painter.setRenderHint(QPainter::Antialiasing, true);QTransform transform;// 平移transform.translate(120, 20);painter.setTransform(transform);painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

旋转

rotate() 使用角度技巧表示远近。设置第二个参数为角度的常量值后,可以使用 X 轴、Y 轴、Z 轴技巧。它默认是以原点为中心进行旋转的,如果要改变旋转的中心,可以使用 translate() 函数完成。

Qt::XAxisQt::YAxisQt::ZAxis
这里写图片描述这里写图片描述这里写图片描述
void MainWindow::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter painter(this);// 反走样painter.setRenderHint(QPainter::Antialiasing, true);QTransform transform;// 平移transform.translate(120, 20);// 旋转transform.rotate(45, Qt::XAxis);painter.setTransform(transform);painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

缩放

scale() 可以进行缩放。

这里写图片描述

这里,使绘制的图像缩小到原来的一半。

void MainWindow::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter painter(this);// 反走样painter.setRenderHint(QPainter::Antialiasing, true);QTransform transform;// 平移transform.translate(120, 20);// 旋转transform.rotate(45);// 缩放transform.scale(0.5, 0.5);painter.setTransform(transform);painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

扭曲

shear() 可以实现图片的扭曲。它有两个参数,前面的参数实现横向变形,后面的参数实现纵向变形。当它们的值为 0 时,表示不扭曲。

这里写图片描述

void MainWindow::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);QPainter painter(this);// 反走样painter.setRenderHint(QPainter::Antialiasing, true);QTransform transform;// 横向扭曲transform.shear(0.5, 0);painter.setTransform(transform);painter.drawPixmap(QRect(0, 0, 150, 150), QPixmap(":/Images/logo"));
}

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

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

相关文章

全网最全!!Qt实现图片旋转及图片旋转动画的几种方式

实现图片旋转的两种方式 第一种方案 使用 QPixmap 的 transformed 函数来实现旋转,这个函数默认是以图片中心为旋转点,不能设置旋转的中心点,使用如下: QMatrix matrix; matrix.rotate(45);QLabel *Label new QLabel(); Label-…

网页特效——女儿国国王

目录 💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝💝&…

不使用插件,小程序也能完整的渲染富文本(视频展现,图片自适应)

用过小程序rict-text的帅哥靓女们(说的就是正在看文章的你)都知道,rich-text是无法解析富文本中的video标签的,本文教你如何优雅的在不使用插件的情况下完整的渲染富文本 首先是富文本图片自适应的问题 当我们从后端拿到富文本数…

让AI替你打工?CHATGPT提升开发效率

1 需求分析 提取需求关键点 ChatGPT 通过对需求文档的分析,自动提取关键需求和功能点,方便开发团队更好地理解项目需求。 2 技术方案 大表更新方案 在某支付业务中,有一个大表4000万行数据,使用的 mysqlA5.6 的版本&#xff…

应聘求职自荐信优秀范文5篇

应聘求职自荐信优秀范文篇1 尊敬的领导: 您好!衷心的感谢您在百忙之中翻阅我的这份材料,并祝愿贵单位事业欣欣向荣,蒸蒸日上! 我是哈尔滨理工大学测控技术及通信工程学院________届毕业生,自从今日大学之后,高考后的轻…

如何写出一份优秀的简历和求职信?

写一份优秀的简历和求职信是成功求职的重要一步。 01、简历 突出重点信息:把最重要的信息放在简历的前面,例如您的工作经验和教育背景等。 使用简明扼要的语言:在简历中使用简短的句子和简明扼要的语言,让招聘者能够快速了解您的…

公司计算机程序员英语怎么说,计算机程序员英文求职信范文模板

计算机程序员英文求职信范文模板 Dear Mr. Arline, I would like to be considered as a candidate for the assistant computer programmer position advertised in the Philadelphia Inquirer on April 28, 2004. I’m currently finishing my degree in Computer Science at…

写一份好的求职简历,让面试官对你刮目相看

简历是一块敲门石,但这块敲门石是什么材质的,恐怕见仁见智。那么什么样的简历才能是一块优质敲门石呢,下面的一些个人见解,希望能给正在或正准备寻找更好发展机会的测试工程师们有所帮助。 一、针对在测试行业中已经有所感悟的人&…

【重要】2023年上半年有三AI新课程规划出炉,讲师持续招募中!

2023年正式起航,想必大家都已经完全投入到了工作状态中,有三AI平台今年将在已有内容的基础上,继续进行新课程开发,本次我们来介绍今年上半年的课程计划,以及新讲师招募计划。 2023年新上线课程 我们平台的课程当前分为…

在微信上部署GPT-4.0!

自从OpenAI开放api以后,使得基于GPT的各类二次开发的应用逐渐多了起来。笔者也在前几天也刚刚收到了GPT-4的api使用资格。 由于众所周知的原因,在OpenAI官网使用GPT多少有点不那么顺畅。笔者曾经尝试过一些本地化部署个人GPT的项目,比如基于C…

什么是LoRA模型,如何使用和训练LoRA模型?你想要的都在这!

什么是LoRA模型 LoRA的全称是LoRA: Low-Rank Adaptation of Large Language Models,可以理解为stable diffusion(SD)模型的一种插件,和hyper-network,controlNet一样,都是在不修改SD模型的前提下,利用少量…

JDBC

JDBC背景知识:JDBC的使用1:驱动包的下载2:驱动包引入3;代码实现1:创建数据源2:和数据库创建网络连接3:构造sql语句4:执行sql5:释放资源sql语句的构建细节 查找操作&#…

计算机专业博士未来的方向,清华学霸、UCLA计算机博士专业导师手把手教你申请...

原标题:清华学霸、UCLA计算机博士专业导师手把手教你申请 封面插图来源:Behance 专业导师 Charles 硕士毕业于清华大学 UCLA 计算机博士在读 研究方向:人工智能、机器学习、自然语言处理 要不要考虑申请CS博士? 我一直坚定想去美国读 CS Ph.D,但是身边有人会问我 CS为什么…

UCLA Stata FAQ:Stata常见问题详解

Stata 现场班报名中…… Stata连享会 精品专题 || 精彩推文 文章目录 [Stata 现场班报名中……](https://gitee.com/arlionn/stata_training/blob/master/README.md) Stata Frequently Asked QuestionsTransferring data to/from StataStata to HLM Stata Graphical User Inte…

心理学博士vs计算机博士,UCLA心理学博士排名,地表最客观干货

原标题:UCLA心理学博士排名,地表最客观干货 加州大学洛杉矶分校是一间位于美国加利福尼亚州洛杉矶的公立学校。UCLA是美国商业金融、高科技产业、电影艺术等专业人才的摇篮。UCLA是加利福尼亚大学系统中的第二所大学,与柏克莱加利福尼亚大学(…

ucla ai_UCLA的可持续性:用户体验案例研究

ucla ai Role: UX Researcher / UX Designer / Critical-thinker 角色: UX研究人员/ UX设计人员/批判性思维者 Scope: 4 weeks, March — March 2020 范围: 4周,2020年3月至2020年3月 What I Did: UX Research, Speculative Design, Produc…

UCLA-(R Graphics: Intro to ggplot2)笔记

目录 原文请见R Graphics: Introduction to ggplot2 (12) (ucla.edu)https://stats.oarc.ucla.edu/stat/data/intro_ggplot2_int/ggplot2_intro_interactive.html#(12) 由于CSDN有时候图会看不见,本文将不放置图片 图形的语法元素 Sitka数据集(这一部分其实就是…

医学图像公开数据集

1. 前列腺数据集 ​ 包含六个center的前列腺分割数据集(可以用来做multi-domain相关的分割任务),详细情况可以查看下表,可以从这条 github链接下载和预处理数据集

UCLA ECE M199 Winter 2021 Midterm Review 笔记整理

UCLA 2021 M199 嵌入式课程中期复习笔记整理 原视频连接:点击