例子:重写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. 坐标系统和坐标变换的更多相关文章

  1. SVG中的坐标系统和坐标变换

    视野和世界 2D绘图中很多人会有一个误区,就是我绘图的区域是一个矩形区域.无论新建一个画布还是创建了一个容器,心里都想象里面有一个矩形区域.其实,在SVG当中,矩形区域只是视野,是我们看到的部分.实际 ...

  2. 2. svg学习笔记-svg中的坐标系统和viewbox

    我是通过<SVG精髓>这本书学习的svg,说实话,这本书写的不好,或者说翻译的不好,我没有看过这本书的原版,不知道原文写的怎么样,但是翻译出来的有些句子真的很拗口.以前老师给我们API文档 ...

  3. 理解SVG坐标系统和变换: transform属性

    SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transf ...

  4. Android OpenGL ES(十二):三维坐标系及坐标变换初步 .

    OpenGL ES图形库最终的结果是在二维平面上显示3D物体(常称作模型Model)这是因为目前的打部分显示器还只能显示二维图形.但我们在构造3D模型时必须要有空间现象能力,所有对模型的描述还是使用三 ...

  5. [原创]java WEB学习笔记33:Session 案例 之 购物车

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. [OpenGL]OpenGL坐标系和坐标变换

    OpenGL通过摄像机的模拟.要实现一个三维计算机图形重大转变,这是几何变换(模型转换-查看转型(两者统称为几何变换)).投影.作物转型.口变换等.同一时候,OpenGL还实现了矩阵堆栈等.理解掌握了 ...

  7. unreal3的坐标系统和vector/rotator

    unreal3的坐标系有点奇葩,属于[z轴向上的左手坐标系]: 1.左手食指指前方,x正向 2.大拇指指上方,z正向 3.中指指右方,y正向 若以我们人头摆正时来参考: 1.目视的是前方,x正向 2. ...

  8. 理解SVG坐标系统和变换: 建立新视窗

    在SVG绘制的任何一个时刻,你可以通过嵌套<svg>或者使用例如<symbol>的元素来建立新的viewport和用户坐标系.在这篇文章中,我们将看一下我们如何这样做,以及这样 ...

  9. C语言实例解析精粹学习笔记——33(扑克牌的结构表示)

    实例33: 使用“结构”定义一副扑克牌,并对变量赋值,输出结果 思路: 扑克牌有4种花色,用枚举类型表示花色,其他都是结构体的简单应用 程序代码: #include <stdio.h> # ...

  10. Linux下汇编语言学习笔记33 ---

    这是17年暑假学习Linux汇编语言的笔记记录,参考书目为清华大学出版社 Jeff Duntemann著 梁晓辉译<汇编语言基于Linux环境>的书,喜欢看原版书的同学可以看<Ass ...

随机推荐

  1. less 常用方法

    介绍 Less 是 CSS 的预处理语言之一,为 CSS 增添了变量.Mixin.函数等特性,使CSS更易于维护扩展. 嵌套(Nesting) .header { .navgation: { font ...

  2. 【Web前端】【开源分享】H5登陆界面 - 2021年12月24日

    点我下载

  3. mapstruct坑:Internal error in the mapping processor: java.lang.NullPointerException at org.mapstruct.

    错误描述 项目中如果使用了mapstruct框架,在使用Idea新版本后,启动会报错! Internal error in the mapping processor: java.lang.NullP ...

  4. Error: Application Server not specified

    在IDEA中tomcat不能运行,点开Edit Configuration发现如下图情况:tomcat图标猫上有个红叉,且下面有警告提示:Error: Application Server not s ...

  5. centOS7安装nginx及nginx配置

    安装所需插件1.安装gccgcc是linux下的编译器在此不多做解释,感兴趣的小伙伴可以去查一下相关资料,它可以编译 C,C++,Ada,Object C和Java等语言 命令:查看gcc版本 gcc ...

  6. ssh远程执行命令方法和Shell脚本实例

    写这篇博客之前,我google了一堆相关文章,大都是说修改/etc/sudoers,然后NOPASSWD:指定的cmd,但是真心不管用,没有远程虚拟终端这个方法就是浮云,ubuntu10.04 ser ...

  7. [转]快速的批量修改重命名.net程序的命名空间

    在实际项目中,我们有时会遇到因为项目重构,需要修改命名空间,除了一个一个类修改外,大多数会采用批量替换的方法去重命名.昨天又遇到了此类问题,网上找过的方法说要结合ReSharper重构重命名.于是装上 ...

  8. DVWA靶场Brute Force (暴力破解) 漏洞low(低),medium(中等),high(高),impossible(不可能的)所有级别通关教程及代码审计

    暴力破解 暴力破解是一种尝试通过穷尽所有可能的选项来获取密码.密钥或其他安全凭证的攻击方法.它是一种简单但通常无效率的破解技术,适用于密码强度较弱的环境或当攻击者没有其他信息可供利用时.暴力破解的基本 ...

  9. 阿里IM技术分享(六):闲鱼亿级IM消息系统的离线推送到达率优化

    本文由阿里闲鱼技术团队逸昂分享,原题"消息链路优化之弱感知链路优化",有修订和改动,感谢作者的分享. 1.引言 闲鱼的IM消息系统作为买家与卖家的沟通工具,增进理解.促进信任,对闲 ...

  10. 《计算机体系结构与SoC设计》(二)

    1. 多指令流单数据流 多指令流单数据流(Multiple Instruction Stream, Single Data Stream,简称 MISD)是一种处理器设计概念,它允许处理器在单个时钟周 ...