例子:重写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. 一个 tomcat 下部署多个项目(超细另类版)

    前言:网上大佬们的都是一个webapps下面部署多个项目,咱们今天来点不一样的,另一种思路则是,多个webapps,每个webapps下面运行一个项目,不知如何本地部署的可以去看看我上一篇随笔 具体步 ...

  2. 鸿蒙UI开发快速入门 —— part05:组件的样式复用

    1. 为什么要样式复用? 如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,样式的复用就很有必要了. 为此,鸿蒙推出了可 ...

  3. 解决Vim粘贴格式乱问题

    在vim粘贴代码的时候,粘贴的代码(shift+insert)会自动缩进,导致格式非常混乱. 本人深受其害,查阅网上大牛,发现以下方式均可行,与大家分享. 下面介绍两种方法: (1)在vim中,进入命 ...

  4. 我用cursor, 半就开发了一个手机壁纸小程序,真的太强了

    前言 我用chatGPT帮我写后端爬虫,分析知乎html代码,爬取知乎壁纸.然后用cursor AI工具,完全使我一个不懂前端uniapp框架的人,开发了一个小程序手机壁纸页面. 原来一周的工作量,半 ...

  5. Spring JDBCTemplate 增删查功能 (简单易懂)

    需要的外部jar包: mysql-connector-javadruid 配置druid <!--配置数据库连接池--> <bean id="dataSource" ...

  6. 国外著名交易策略:R-Breaker模型设计原理(转载)

    R-Breaker是一种短线日内交易策略,它结合了趋势和反转两种交易方式. 交易系统的基本原理如下: 1.根据前一个交易日的收盘价.最高价和最低价数据通过一定方式计算出六个价位,从大到小依次为:突破买 ...

  7. Qt开发经验小技巧211-215

    QMainWindow 在对停靠窗体进行排列的时候,有些不常用的设置容易遗忘,建议将 QMainWindow 的头文件函数过一遍一目了然. //设置停靠参数,不允许重叠,只允许拖动 this-> ...

  8. 在 Ubuntu 上搭建 MinIO 服务器

    在日常开发时,如果有文件上传下载的需求(比如用户头像),但是又不想使用对象存储,那么自己搭建一个 MinIO 服务器是一个比较简单的解决方案. MinIO 是一个基于 Apache License v ...

  9. [转]【Qt-license】误操作qt下载导致只能安装商业版试用十天,无法安装社区版

    背景:原本是为了学习qml,需要下载一个design studio,而这个需要比较新版的安装程序,但新版的安装程序官方都是online安装.于是从官网找下载链接.毕竟是英文的,又心急,误打误撞中我选择 ...

  10. Java中hashCode() 和 equals()

    该文章为转载(原文链接在结尾),虽然篇幅偏长,但是却能使你真正理解hashCode和queals各自的作用以及之间的联系,尤其是第四部分,读完肯定会让你有所收获. 第1部分 equals() 的作用 ...