【Qt 基础】绘图

画笔

QPen pen;
pen.setWidth(3); // 线条宽度
pen.setColor(Qt::red);// 画笔颜色
pen.setStyle(Qt::DashLine);// 线条样式
pen.setCapStyle(Qt::RoundCap);// 线端样式
pen.setJoinStyle(Qt::BevelJoin);// 连接样式
painter.setPen(pen);

线条
在这里插入图片描述

线端

在这里插入图片描述

连接

在这里插入图片描述

画刷

    QBrush brush;brush.setColor(Qt::yellow);// 颜色brush.setStyle(Qt::SolidPattern);// 样式brush.setTexture(QPixmap &pixmap);// 设置画刷图片

在这里插入图片描述

渐变

     QRadialGradient rg(W/2,H/2,qMax(W/8,H/8),W/2,H/2);rg.setColorAt(0,Qt::green);rg.setColorAt(1,Qt::blue);rg.setSpread(QGradient::ReflectSpread);
QLinearGradient
QRadialGradient
QConicalGradient

在这里插入图片描述

渐变模式

PadSpread
RepeatSpread
ReflectSpread

在这里插入图片描述

画家

可以画不同的基本图形元件

更复杂的图形用QPainterPath

对画家的操作

painter.rotate(15);//旋转
painter.translate(20,20);//平移
painter.scale(0.5,0.5);//坐标缩放
painter.shear(0.5,0.5);//扭转变换painter.save();
painter.rotate(15);//旋转
painter.restore();
painter.drawRect(rect);

视口和窗口

物理设备提供最基本的坐标系,

通过各种变换得到逻辑坐标系,

为了更方便的操作,出现了视口坐标系和窗口坐标系,

视口表示绘图设备的任意一个矩形区域的物理坐标,默认情况下为整个绘图设备区域。

窗口与视口是同一个矩形,可以重新定义矩形区域的逻辑坐标。

视口设置为painter.setViewport(50,0,200,200),即物理设备的(50,0)为左上角,绘制一个200的正方形,改形状为视口。但坐标系与物理坐标系一致。

然后使用painter.setViewport(-50,-50,100,100)这里定义(50,0)(-50,-50)且对长宽做了缩放,这里是缩小了,缩小到(100,100),以后的操作都是在100$\times$100的空间进行。
在这里插入图片描述

    QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);int W = this->width();int H  = this->height();qDebug()<<W<<" "<< H;int side = qMin(W,H);QRect rect((W-side)/2,(H-side)/2,side,side);painter.drawRect(rect);painter.setViewport(rect);painter.setWindow(-100,-100,200,200);QPen pen;pen.setWidth(2);pen.setColor(Qt::red);pen.setStyle(Qt::SolidLine);painter.setPen(pen);QLinearGradient linearGrad(0,0,100,0);linearGrad.setColorAt(0,Qt::yellow);linearGrad.setColorAt(1,Qt::green);linearGrad.setSpread(QGradient::PadSpread);painter.setBrush(linearGrad);//painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);painter.setCompositionMode(QPainter::CompositionMode_Difference);for(int i = 0; i < 36; i++){painter.drawEllipse(QPoint(50,0),50,50);painter.rotate(10);}

运行结果
在这里插入图片描述

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

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

相关文章

Spring容器详细介绍

Spring容器 1 Spring核心容器介绍 问题导入 问题&#xff1a;按照Bean名称获取Bean有什么弊端&#xff0c;按照Bean类型获取Bean有什么弊端&#xff1f; 1.1 创建容器 方式一&#xff1a;类路径加载配置文件 ApplicationContext ctx new ClassPathXmlApplicationContext…

复合类型的字节对齐

引子 #inlcude<stdio.h> struct s{int i;char a: }; struct s sVar {5,A}; int main(void){printf("%d\n",sizeof(sVar)); }问1&#xff1a;上面这个代码的输出结果是多少&#xff1f; 答1&#xff1a; 思考 明明sVar这个结构体就两个元素&#xff0c;5和…

什么是幂等?如何实现幂等?

一 定义 幂等性&#xff08;Idempotence&#xff09;是数学与计算机科学中的一个概念&#xff0c;它指的是一个操作、函数或方法被重复执行多次与仅执行一次的效果相同&#xff0c;或者说&#xff0c;其后续调用的结果不会改变之前调用的结果。 在计算机科学中&#xff0c;这个…

Spring Boot实战:无缝对接OpenAI

Spring Boot实战&#xff1a;无缝对接OpenAI 在当今的技术领域&#xff0c;人工智能&#xff08;AI&#xff09;已经成为一股不可忽视的力量。OpenAI作为其中的佼佼者&#xff0c;提供了强大的API供开发者使用&#xff0c;以实现各种AI功能。本文将详细介绍如何使用Spring Boo…

开闭原则 (Open/Closed Principle, OCP)

开闭原则 (Open/Closed Principle, OCP) 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;是面向对象设计的五大原则之一。它的基本思想是&#xff1a;软件实体&#xff08;类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改关闭。即在不修改现有代码…

uniapp实现水印相机

uniapp实现水印相机-livePusher 水印相机 背景 前两天拿到了一个需求&#xff0c;要求在内部的oaApp中增加一个卫生检查模块&#xff0c;这个模块中的核心诉求就是要求拍照的照片添加水印。对于这个需求&#xff0c;我首先想到的是直接去插件市场&#xff0c;下一个水印相机…

多头注意力机制详解:多维度的深度学习利器

引言 多头注意力机制是对基础注意力机制的一种扩展&#xff0c;通过引入多个注意力头&#xff0c;每个头独立计算注意力&#xff0c;然后将结果拼接在一起进行线性变换。本文将详细介绍多头注意力机制的原理、应用以及具体实现。 原理 多头注意力机制的核心思想是通过多个注…

springAMQP自定义fanout交换机进行消息的广播

rabbitmq一共有三种交换机&#xff1a; fanout--广播direct--定向topic--话题 rabbitmq-web端 首先我们需要建立一个名叫cybg.fanout交换机与两个自定义的队列用于测试广播效果 我这里就起名字叫做fanout_queue1&fanout_queue2 项目中&#xff1a; 首先对我们的Liste…

当代政治制度(练习题)

当代政治制度&#xff08;练习题&#xff09; *** Rz整理 仅供参考 *** 目前地方人大设立的专门委员会不包括&#xff08;B.法律审查委员会F.外交事务专门委员会 &#xff09;答案不确定 等待指点 A.法制委员会 B.法律审查委员会 C.财政经济委员会 D.社会建设委员会 E.农业与…

Go语言基础数据类型、变量及自增语法

本文内容为Go语言的基础数据类型、变量定义和赋值及自增语法介绍。 目录 基础数据类型 变量 先定义后赋值 定义时直接赋值 自动推导定义赋值 平行赋值 自增语法 总结 基础数据类型 int,int8 intl6, int32, int64 uint8... uint64 float32,float64 true/false 变量 …

unity 环形循环切换UI

环形ui管理器 using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using DG.Tweening; using System.Collections; using Unity.VisualScripting;public class LevelSelector : MonoBehaviour {public GameObject levelButtonPrefab; // 关卡按钮的…

Elasticsearch:介绍 retrievers - 搜索一切事物

作者&#xff1a;来自 Elastic Jeff Vestal, Jack Conradson 在 8.14 中&#xff0c;Elastic 在 Elasticsearch 中引入了一项名为 “retrievers - 检索器” 的新搜索功能。继续阅读以了解它们的简单性和效率&#xff0c;以及它们如何增强你的搜索操作。 检索器是 Elasticsearc…

Linux:解决vim打开文件默认为replace模式

现象 Ubuntu打开 vim 默认为 replace 模式 原因 终端的编码设置与目标机器的编码设置不同。 解决方案 修改 vim 配置文件( /etc/vim/vimrc或者~/.vimrc)&#xff0c;添加&#xff1a; set termencodingutf-8 set fileformatsunix set encodingprcP.S. vimrc 中注释使用英…

知识图谱与LLMs:实时图分析(通过其关系的上下文理解数据点)

大型语言模型 (LLM) 极大地改变了普通人获取数据的方式。不到一年前&#xff0c;访问公司数据需要具备技术技能&#xff0c;包括熟练掌握各种仪表板工具&#xff0c;甚至深入研究数据库查询语言的复杂性。然而&#xff0c;随着 ChatGPT 等 LLM 的兴起&#xff0c;随着所谓的检索…

Ubuntu系统安装mysql之后进行远程连接

1.首先要配置数据库允许进行远程连接 1.1 打开MySQL配置文件 /etc/mysql/mysql.conf.d/mysqld.cnf sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf1.2 修改 bind-address 行 #按i进入插入模式 bind-address 0.0.0.0 #按 Esc 键退出插入模式。 #输入:wq 然后按 Enter 保存并退…

React学习笔记02-----

一、React简介 想实现页面的局部刷新&#xff0c;而不是整个网页的刷新。AJAXDOM可以实现局部刷新 1.特点 &#xff08;1&#xff09;虚拟DOM 开发者通过React来操作原生DOM&#xff0c;从而构建页面。 React通过虚拟DOM来实现&#xff0c;可以解决DOM的兼容性问题&#x…

Window10下安装WSL-Ubuntu20.04

1.开启并更新WSL 1.1开启WSL 首先先来看一下电脑是否能够开启WSL:待补充... 然后再来看一下如何开启WSL:win->设置->应用->应用和功能->程序和功能&#xff0c;如下所示&#xff1a; 最后选择启用或关闭Windows功能&#xff0c;开启两个选项&#xff1a;1.Hyper-V…

工具推荐|语音轻松记笔记,AI帮你识别和润色

# 你日常有没有遇到这样的场景&#xff1f; 偶尔有一些奇思妙想想要记录下来&#xff0c;但没有一个轻量的工具&#xff0c;往往会想着想着就把这个想法抛之脑后。特别是搞短视频的&#xff0c;你也许希望把当时的想法录下来&#xff0c;稍微剪辑下就能出一条不错的口播视频。…

springboot的JWT令牌

生成JWT令牌 依赖 <!--jwt令牌--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.9.1</version> </dependency> <dependency> <groupId>javax.xml.bind<…

【LeetCode】最小栈

目录 一、题目二、解法完整代码 一、题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元…