Qt——2D画图

基础画图函数

矩形

painter.drawRect(50,50,200,100);

圆角矩形

painter.drawRoundRect(50,50,200,200,50,50);

xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定,并且应该在0.0到100.0的范围内

弧线

painter.drawArc(50,50,200,200, -90*16, 90*16);

水平向右为0度,顺时针spanAngle为正

startAngle和spanAngle精度为1/16度,

painter.drawChord(350,50,200,200, -90*16, 90*16);

同上,startAngle和spanAngle精度为1/16度,会把弧也画出来

扇形

painter.drawPie(350,50,200,200, -90*16, 90*16);

路径 QPainterPath 类

QPainterPath 类是一个容器,可把图形形状保存其中,需要时可再次使用,也就是说,复
杂的图形只需要使用路径创建一次,然后就可以调用 QPainter::drawPath()函数多次绘制它

步骤 :

1)、创建 QPaiterPath 对象。 

2)、使用 moveTo 把当前点移至需要绘制图形的开始位置 

3)、使用 lintTo()、arcTo()等函数绘制直线、弧等图形,还可使用 addRect()、addEllipse()
等函数把封闭子路径添加到路径。 

4)、使用 QPainter::drawPath()函数绘制路径所描述的图形。

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QPainterPath pa1;pa1.moveTo(width()/2,height()/2);pa1.arcTo(0,0,width(),height(), -90, 90);painter.drawPath(pa1);
}

与上面不同的是 pa1.arcTo(0,0,width(),height(), -90, 90);这里的 startAngle, arcLength精度是1度

QPainterPath 填充

即使绘制的路径不是封闭的,也会被视为是隐式关闭的,因此可被填充

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);QBrush bs(QColor(1,188,1));painter.setBrush(bs);QPainterPath pa1;pa1.moveTo(width()/2,height()/2);pa1.arcTo(0,0,width(),height(), -90, 90);painter.drawPath(pa1);
}

图形的交、并、补

Qt绘制图形的交、并、补_qt 图形 交点-CSDN博客

void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);//创建画笔//设置绘制样式painter.setPen(QPen(QColor(0,255,0,0)));//描边颜色painter.setBrush(QBrush(Qt::red));//填充颜色(不设置就只是线)//路径QPainterPath pa1 ,pa2;QPolygonF f1,f2;pa1.addEllipse(100,100,250,250);pa2.addEllipse(200,200,250,250);//路径转多边形f1 = pa1.toFillPolygon();f2 = pa2.toFillPolygon();//交并补QPolygonF un = f1.united(f2);//并//绘制painter.drawPolygon(un);QPainterPath pa3 ,pa4;QPolygonF f3,f4;pa3.addEllipse(600,100,250,250);pa4.addEllipse(700,200,250,250);//路径转多边形f3 = pa3.toFillPolygon();f4 = pa4.toFillPolygon();QPolygonF su = f3.subtracted(f4);//差painter.drawPolygon(su);QPainterPath pa5 ,pa6;QPolygonF f5,f6;pa5.addEllipse(1100,100,250,250);pa6.addEllipse(1200,200,250,250);//路径转多边形f5 = pa5.toFillPolygon();f6 = pa6.toFillPolygon();QPolygonF in = f5.intersected(f6);//交//绘制painter.drawPolygon(in);
}

不规则型形状

通过图形的交并补形成不规则图像虽然是可行的,但是代码上实现起来并不那么容易。如何实现不规则形状?

可通过qt的不规则窗口方法实现在widget中画出不规则图像。通过设置窗口的mask属性,使用的图片背景的透明区域会作为窗口的透明区域,且透明区域不影响对窗口后的物体的操作。这样形状完全可以由美工画图实现

Qt下实现不规则形状窗口显示_qt异形窗口-CSDN博客

void MyLL::initWidget()
{this->setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint);QPixmap pix;pix.load(":/photo/ll.png",0,Qt::AvoidDither);resize(pix.size());setMask(QBitmap(pix.mask()));                 //设置透明//setAttribute(Qt::WA_TranslucentBackground);   //去除毛边
}void MyLL::paintEvent(QPaintEvent *event)
{//qDebug()<<"event:"<<event;QPainter painter(this);painter.drawPixmap(rect(),QPixmap(":/photo/ll.png"),QRect());QPen pen; //画笔。绘制图形边线,由颜色、宽度、线风格等参数组成pen.setColor(QColor(255,0,0,255));QBrush brush;   //画刷。填充几何图形的调色板,由颜色和填充风格组成brush.setColor(QColor(0,255,0,255));brush.setStyle(Qt::SolidPattern);//可在QPaintDevice上绘制各种图形。QPaintDevice有之类QWidget、QImage、QOpenGLPaintDevice等painter.setPen(pen);painter.setBrush(brush);painter.drawRect(0,0,this->width(),this->height());
}

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

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

相关文章

探秘开源隐语:架构深度剖析与隐私计算技术之旅

1.隐语架构 隐语&#xff08;SecretFlow&#xff09;作为蚂蚁集团开源的可信隐私计算框架&#xff0c;其架构设计具有多层次的特点&#xff0c;虽然具体分层名称可能会根据实际描述略有差异&#xff0c;但我们可以依据已有的技术和信息对其进行结构化的拆解&#xff1a; 硬件层…

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测

回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测 目录 回归预测 | Matlab基于SAO-BiLSTM雪融算法优化双向长短期记忆神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于SAO-B…

MySQL学习笔记------SQL(1)

关系型数据库&#xff08;RDBMS&#xff09; 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表储存数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SQL通用语法 SQL…

反序列化漏洞简单知识

目录&#xff1a; 一、概念&#xff1a; 二、反序列化漏洞原因 三、序列化漏洞的魔术方法&#xff1a; 四、反序列化漏洞防御&#xff1a; 一、概念&#xff1a; 序列化&#xff1a; Web服务器将HttpSession对象保存到文件系统或数据库中&#xff0c;需要采用序列化的…

蓝桥杯day12刷题日记

P8720 [蓝桥杯 2020 省 B2] 平面切分 思路&#xff1a;首先借用dalao的图解释一下&#xff0c;又多出一条与当前平面任意一条直线都不重合线时&#xff0c;多了的平面是交点数1&#xff0c;所以用双层循环每次往里面加一条直线&#xff0c;计算交点 #include <iostream>…

STM32--RC522学习记录

一&#xff0c;datasheet阅读记录 1.关于通信格式 2.读寄存器 u8 RC522_ReadReg(u8 address) {u8 addr address;u8 data0x00;addr((addr<<1)&0x7e)|0x80;//将最高位置一表示read&#xff0c;最后一位按照手册建议变为0Spi_Start();//选中从机SPI2_ReadWriteByte(ad…

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想&#xff0c;将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方&#xff0c;无外乎外设初始化以及外设的使用。想用好这两个功能&#xff0c;我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

[Java基础揉碎]final关键字

目录 介绍 在某些情况下&#xff0c;程序员可能有以下需求&#xff0c;就会使用到final final注意事项和讨论细节 1) final修饰的属性又叫常量&#xff0c;一般用XX_XX_XX来命名 2) final修饰的属性在定义时&#xff0c;必须赋初值&#xff0c;并且以后不能再修改&#…

国内IP地址和网关的定义与作用

在国内网络通信系统中&#xff0c;IP地址和网关扮演着至关重要的角色&#xff0c;它们相互配合&#xff0c;构成了连接各种网络设备和实现数据传输的基础。虎观代理小二将深入探讨国内IP地址和网关的定义、作用以及在网络通信中的重要性。 1. IP地址的作用和特点 IP地址定义&am…

python绘图matplotlib——使用记录1

本博文来自于网络收集&#xff0c;如有侵权请联系删除 使用matplotlib绘图 1 常用函数汇总1.1 plot1.2 legend1.3 scatter1.4 xlim1.5 xlabel1.6 grid1.7 axhline1.7 axvspan1.8 annotate1.9 text1.10 title 2 常见图形绘制2.1 bar——柱状图2.2 barh——条形图2.3 hist——直…

python第三方库的安装,卸载和更新,以及在cmd下pip install安装的包在pycharm不可用问题的解决

目录 第三方库pip安装&#xff0c;卸载更新 1.安装&#xff1a; 2.卸载 3.更新 一、第三方库pip安装&#xff0c;卸载更新 1.安装 pip install 模块名 加镜像下载&#xff1a;pip install -i 镜像网址模块名 常用的是加清华镜像&#xff0c;如 pip install -i https://pyp…

农夫山泉2024财报即将公布,首富地位恐难撼动,巨额利润或将流失海外

农夫山泉2024财报即将公布&#xff0c;首富地位恐难撼动&#xff0c;巨额利润或将流失海外 2024年3月26日&#xff0c;农夫山泉新一年的财报即将公布&#xff0c;根据现有的经济数据分析&#xff0c;农夫山泉此次财报应该不会受到近期负面事件的影响&#xff0c;钟晱晱的首富地…

JavaEE企业级分布式高级架构师课程

教程介绍 本课程主要面向1-5年及以上工作经验的Java工程师&#xff0c;大纲由IT界知名大牛 — 廖雪峰老师亲自打造&#xff0c;由来自一线大型互联网公司架构师、技术总监授课&#xff0c;内容涵盖深入spring5设计模式/高级web MVC开发/高级数据库设计与开发/高级响应式web开发…

stm32学习-vs1053使用

1.基本概念 vs1053是一款音频解码芯片&#xff0c;通过SPI不断输入音频数据&#xff0c;vs1053自动解码。 引脚说明 常用命令寄存器 码率&#xff1a;每秒数据数&#xff0c;单位一般为bit&#xff0c;越高越保真 2.配置流程 3.使用流程 4.问题总结 1.不能一次性从sd卡中读…

马斯克开源的 grok-1 底层 Transformer 模型论文 《Attention is All You Need》

拓展阅读 马斯克开源的 grok-1 底层 Transformer 模型论文 《Attention is All You Need》 马斯克开源的 grok-1 大模型底层 Transformer 模型到底是个啥&#xff1f; 马斯克开源的 grok-1 大模型硬核源码第 1 弹 马斯克开源的 grok-1 大模型硬核源码第 2 弹 马斯克开源的…

记录echarts各种地图json文件下载地址

今日绘图需要用到echarts的地图json文件&#xff0c;但是github上已经找不到了&#xff0c;后发现伟大的网友提供了地址如下&#xff1a;Index of /examples/data/asset/geohttps://echarts.apache.org/examples/data/asset/geo/

初探Flink集群【持续更新】

周末下雨&#xff0c;倒杯茶&#xff0c;在家练习Flink相关。 开发工具&#xff1a;IntelliJ Idea 第一步、创建项目 打开Idea&#xff0c;新建Maven项目&#xff0c;包和项目命名 在pom.xml 文件中添加依赖 <properties><flink.version>1.13.0</flink.vers…

Python从0到100(八):Python元组介绍及运用

一、什么是元组 Python的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改。元组使用小括号&#xff0c;列表使用方括号。 tup1 (physics, chemistry, 1997, 2000) tup2 (1, 2, 3, 4, 5 ) tup3 "a", "b", "c", "d"二、…

超声波清洗机优势有哪些?全网火爆超声波清洗机品牌推荐

人们对于清洁效率和质量的要求越来越高&#xff0c;传统的清洗方法已经难以满足人们对于精细清洁的需求。这时&#xff0c;超声波清洗机以其独特的清洗机制和显著的清洗效果成为了市场上的新宠。它能够深入物体的微观世界&#xff0c;轻松去除污渍&#xff0c;同时不损伤物品表…

Python学习从0到1 day18 Python可视化基础综合案例 1.折线图

我默记这段路的酸楚&#xff0c;等来年春暖花开之时再赏心阅读 —— 24.3.24 python基础综合案例 数据可视化 — 折线图可视化 一、折线图案例 1.json数据格式 2.pyecharts模块介绍 3.pyecharts快速入门 4.数据处理 5.创建折线图 1.json数据格式 1.什么是json 2.掌握如何使用js…