QT5笔记:33. 坐标系统和坐标变换

例子:重写widget的painterEvent
MainWindow.cpp
void Widget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::RenderHint::HighQualityAntialiasing);
QPen pen;
pen.setColor(QColor(170, 170, 90));
pen.setWidth(5);
pen.setStyle(Qt::SolidLine);
painter.setPen(pen);
QBrush brush;
brush.setColor(QColor(120, 180, 200));
brush.setStyle(Qt::BrushStyle::SolidPattern);
painter.setBrush(brush);
qreal radio = 100;
qreal deg = 3.1415926535797 / 180 * 72;
QPoint points[5] = {//按照 1 3 5 2 4 的顺序就可以完成绘制,简单方法
QPoint(radio, 0),
QPoint(radio * qCos(deg), -radio * qSin(deg)),
QPoint(radio * qCos(deg * 2), -radio * qSin(deg * 2)),
QPoint(radio * qCos(deg * 3), -radio * qSin(deg * 3)),
QPoint(radio * qCos(deg * 4), -radio * qSin(deg * 4))
};
QPainterPath path;
path.moveTo(points[3]);
path.lineTo(points[1]);
path.lineTo(points[4]);
path.lineTo(points[2]);
path.lineTo(points[0]);
path.closeSubpath();
QFont font;
font.setPointSize(15);
font.setFamily("MiSans");
painter.setFont(font);
path.addText(points[0], font, "0");
path.addText(points[1], font, "1");
path.addText(points[2], font, "2");
path.addText(points[3], font, "3");
path.addText(points[4], font, "4");
painter.save();//保存painter矩阵状态:旋转、缩放、平移
painter.translate(200, 200);//平移原点
painter.drawText(0, 0, "S1");
painter.drawPath(path);
painter.restore();
painter.translate(200 + 200, 200);//平移原点
painter.rotate(90);//角度制,旋转
painter.scale(0.75, 0.75);
painter.drawText(0, 0, "S2");
painter.drawPath(path);
painter.resetTransform();//恢复到未做旋转、缩放、平移的状态
painter.translate(200 + 200 + 200, 200);//平移原点
painter.scale(0.75, 0.75);
painter.drawText(0, 0, "S3");
painter.drawPath(path);
}
界面:

QT5笔记:33. 坐标系统和坐标变换的更多相关文章
- SVG中的坐标系统和坐标变换
视野和世界 2D绘图中很多人会有一个误区,就是我绘图的区域是一个矩形区域.无论新建一个画布还是创建了一个容器,心里都想象里面有一个矩形区域.其实,在SVG当中,矩形区域只是视野,是我们看到的部分.实际 ...
- 2. svg学习笔记-svg中的坐标系统和viewbox
我是通过<SVG精髓>这本书学习的svg,说实话,这本书写的不好,或者说翻译的不好,我没有看过这本书的原版,不知道原文写的怎么样,但是翻译出来的有些句子真的很拗口.以前老师给我们API文档 ...
- 理解SVG坐标系统和变换: transform属性
SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transf ...
- Android OpenGL ES(十二):三维坐标系及坐标变换初步 .
OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...
- [原创]java WEB学习笔记33:Session 案例 之 购物车
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- [OpenGL]OpenGL坐标系和坐标变换
OpenGL通过摄像机的模拟.要实现一个三维计算机图形重大转变,这是几何变换(模型转换-查看转型(两者统称为几何变换)).投影.作物转型.口变换等.同一时候,OpenGL还实现了矩阵堆栈等.理解掌握了 ...
- unreal3的坐标系统和vector/rotator
unreal3的坐标系有点奇葩,属于[z轴向上的左手坐标系]: 1.左手食指指前方,x正向 2.大拇指指上方,z正向 3.中指指右方,y正向 若以我们人头摆正时来参考: 1.目视的是前方,x正向 2. ...
- 理解SVG坐标系统和变换: 建立新视窗
在SVG绘制的任何一个时刻,你可以通过嵌套<svg>或者使用例如<symbol>的元素来建立新的viewport和用户坐标系.在这篇文章中,我们将看一下我们如何这样做,以及这样 ...
- C语言实例解析精粹学习笔记——33(扑克牌的结构表示)
实例33: 使用“结构”定义一副扑克牌,并对变量赋值,输出结果 思路: 扑克牌有4种花色,用枚举类型表示花色,其他都是结构体的简单应用 程序代码: #include <stdio.h> # ...
- Linux下汇编语言学习笔记33 ---
这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...
随机推荐
- 下列哪个选项是对 WebSocket 的正确描述?
A. 一种扩展 HTTP 的协议,通信消息以 XML 格式描述. B. 使用 http或https作为URI连接的前缀,并使用与HTTP和HTTPS相同的端口号进行通信. C. 它是一种双向通信 ...
- 小程序 构建npm
1. 在项目文件夹下 打开cmd 窗口,输入: npm init 一直回车即可 2. 安装模板 npm i @vant/weapp -S --production 3. 在微信开发者工具,左上角工具中 ...
- RabbitMQ, Windows Server 上服务总线的替代品
RabbitMQ, Windows Server 上服务总线的替代品 https://www.robfox.io/2017/04/17/rabbitmq-alternative-service-bus ...
- Anaconda功能、优点、安装步骤(安装视频)
目录 介绍 功能(包和环境的管理器) 优点(省时省心) 下载地址 安装教程 要点 conda 的常见命令 查询完整帮助文件 管理conda和anaconda 管理环境 包管理 其他 介绍 Anac ...
- Doc for DevNow
前言 DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论.搜索等功能,欢迎大家体验. 首先庆祝下 DevNow star 在不久前过百,对我来说还是蛮有成就感的,感 ...
- Docker OCI runtime exec failed: exec failed: container_linux.go:344: starting container process caus
docker执行命令:docker exec -it 1e33b26152e1 /bin/bash 在进入容器报错:OCI runtime exec failed: exec failed: cont ...
- 性能优化!突破性能瓶颈的尖兵CPU Cache
大家好,我是呼噜噜,今天我们来介绍计算机的储存器之一,CPU高速缓冲存储器也叫高速缓存,CPU Cache 缓存这个专业术语,在计算机世界中是经常使用到的.它并不是CPU所独有的,比如cdn缓存网站信 ...
- 关于QtCreator中三种不同编译版本 debug、release、profile 的区别
debug调试模式,编译后的可执行文件很大,带了很多调试符号信息等,方便开发阶段调试的时候进入具体的堆栈查看值.会打开所有的断言,运行阶段性能差速度慢,可能会有卡顿感觉. release发布模式,编译 ...
- 网络编程入门从未如此简单(三):什么是IPv6?漫画式图文,一篇即懂!
本文由小枣君分享,文案:小枣君.漫画:杨洋,来自鲜枣课堂,有少许改动,原文链接见文末. 1.引言 网络编程能力对于即时通讯技术开发者来说是基本功,而计算机网络又是网络编程的理论根基,因而深刻准确地理解 ...
- WPF 怎么利用behavior优雅的给一个Datagrid添加一个全选的功能
前言:我在迁移旧项目代码的时候发现别人写很多界面都涉及到一个DataGrid的全选,但是每个都写的很混乱,现在刚好空闲下来,写一个博客, 给部分可能不太会写这个的同学讲一下,怎么实现全选功能,并且可以 ...