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.mzph.cn/news/768384.shtml

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

相关文章

web渗透测试漏洞流程:红队攻防流程详细大纲

web渗透测试漏洞流程 红队攻防文章跳转大纲前期准备漏洞分析内网阶段内网域渗透持续控制数据收集报告与总结&#xff1a; 红队攻防文章跳转大纲 前期准备 确定目标 明确攻击的目标系统和范围&#xff0c;包括其网络拓扑结构、IP 地址段、域名信息等。 收集信息 通过多种手…

ubuntu18安装opensips3.4,开启ws/wss/http接口模块

、如果是centos 7安装则使用yum 命令。 添加库地址注意系统类型&#xff0c;选择对应的系统类型和版本 curl https://apt.opensips.org/opensips-org.gpg -o /usr/share/keyrings/opensips-org.gpg echo "deb [signed-by/usr/share/keyrings/opensips-org.gpg] https:/…

git-gitlab ssh key配置成功后,使用ssh clone仓库时提示需要输入密码

本文仅记录自己遇到的问题及解决方案 问题现象&#xff1a;使用http或者ssh clone仓库时&#xff0c;总是提示ssl或者需要输入密码的问题&#xff0c;报错如下&#xff1a; git clone http://10.21.2.177/metaworks/metaworks-digitalhuman.git 正克隆到 metaworks-digitalhu…

C++中拷贝对象时编译器做出的一些优化

目录 拷贝对象时编译器做出的一些优化 参数传递优化 返回值优化 拷贝对象时编译器做出的一些优化 &#x1f4cc; 下面的优化结果由编译器决定&#xff0c;不同的编译器优化结果可能不同&#xff0c;视具体情况而定 参数传递优化 在前面的explicit关键字部分提到过编译器…

neo4j所有关系只显示RELATION,而不显示具体的关系

当看r时&#xff0c;真正的关系在properties中的type里&#xff0c;而type为“RELATION” 造成这个的原因是&#xff1a; 在创建关系时&#xff0c;需要指定关系的类型&#xff0c;这是固定的&#xff0c;不能像属性那样从CSV文件的一个字段动态赋值。标准的Cypher查询语言不支…

人工智能之Tensorflow变量作用域

在TensoFlow中有两个作用域&#xff08;Scope&#xff09;&#xff0c;一个时name_scope ,另一个是variable_scope。variable_scope主要给variable_name加前缀&#xff0c;也可以给op_name加前缀&#xff1b;name_scope给op_name加前缀。 variable_scope 通过所给的名字创建或…

C++中类和对象其他内容

目录 explicit关键字 static成员 static成员的介绍 static成员的使用 友元 友元函数 友元类 内部类 匿名对象 explicit关键字 在C中&#xff0c;给类对象初始化时会调用类的构造函数&#xff0c;但是也可以使用赋值运算符为构造函数只有一个参数&#xff08;或者只有…

Stable diffusion(四)

训练自己的Lora 【DataSet】【Lora trainer】【SD Lora trainer】 前置的知识 batch size&#xff1a;模型一次性处理几张图片。一次性多处理图片&#xff0c;模型能够综合捕捉多张图片的特征&#xff0c;最终的成品效果可能会好。但是处理多个batch size也意味着更大的显存…

nvm更换node.js的版本

自行下载nvm 打开cmd 1. nvm ls 列出目前已经下载的node版本&#xff0c;和正在使用的node版本 2. nvm install v版本号 下载某个版本 3. nvm uninstall v版本号 卸载某个版本 4. nvm use 版本号 切换到某个版本

深入理解栈和队列(二):队列

个人主页&#xff1a;17_Kevin-CSDN博客 专栏&#xff1a;《数据结构》 一、队列的概念和结构 队列是只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的…

吴恩达2022机器学习专项课程(一) 3.5 可视化成本函数

问题预览 为什么要可视化成本函数&#xff1f;可视化之后的成本函数是什么样子&#xff1f;如何在三维空间里通过w和b找到一个成本函数的值&#xff1f;如何在三维空间里找到成本函数的最小值&#xff1f; 解读 可视化成本函数&#xff1a;为了更加方便的看到不同的w和b&…

AI:152- 利用深度学习进行手势识别与控制

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一. 利用深度学习进行手势识别与控制 …

Acrobat Pro DC ----专业PDF编辑与管理

Acrobat Pro DC 2023是一款功能强大的PDF处理软件&#xff0c;它提供了丰富的编辑工具&#xff0c;支持创建、编辑、合并、分割PDF文件&#xff0c;以及高质量的PDF到其他格式的转换功能。同时&#xff0c;该软件集成了最新的OCR技术&#xff0c;可将扫描文档或图片转换成可编辑…

转座子插入位点分析4------PS转座子测序数据分析

观察数据 这是经公司使用fastp质控后的数据&#xff0c;我们先挑选部分数据进行比对&#xff0c;观察序列结构 为了准确性&#xff0c;我们再次挑选另一批数据进行比对 可以看到&#xff0c;所有序列都存在一个“GTGTCAAATACTTATTTTCCCCGCTGTA”的前导序列&#xff0c;这可能…

《大厂面试模拟(免费) - C++工程方向》

以个人的名义&#xff0c;提供c工程方向的大厂面试模拟&#xff0c;不会以任何形式收费。此面试可为应聘者提供真实反馈。简历和面试过程不会以任何形式给第三方&#xff08;包括我当前所在公司&#xff09;。 我的经验&#xff1a; 多年百度&#xff0c;阿里知名核心项目组工…

Linux快速安装FFmpeg、ffprobe、ffplay以及在Linux上的使用

文章目录 一、工具简介二、CentOS7上安装FFmpeg2.1 方法一&#xff1a;yum安装2.2 方法二&#xff1a;源码安装 三、ffprobe 在linux中的用法3.1 显示多媒体文件的基本信息3.2 显示特定流的信息3.3 获取音视频的时长 一、工具简介 这些工具都是与多媒体处理和流媒体相关的开源…

uniapp页面嵌套其他页面的实现

功能: 类似于一个drawer&#xff0c;当主页面加载的时候会一并加载url对应的组件&#xff0c;当点击后以drawer形式显示组件里面的内容&#xff0c;可动画。 <navigator url"/pages/my/components/personalMessage" slot"right"><view><di…

Java螺旋折线

题目描述 如图所示的螺旋折线经过平面上所有整点恰好一次。 对于整点 (X,Y)&#xff0c;我们定义它到原点的距离dis(X,Y) 是从原点到 (X,Y) 的螺旋折线段的长度。 例如 dis(0,1)3&#xff0c;dis(−2,−1)9。 给出整点坐标 (X,Y)&#xff0c;你能计算出 dis(X,Y) 吗&#xf…

GO-初识包管理

初识包管理&#xff0c;知道项目中文件和文件夹之间的关系 输出&#xff0c;代码&#xff0c;在go编译器运行时会显示在屏幕中 初识数据类型 整型&#xff0c;数字。例如&#xff1a;1、2、3、4 字符串类型&#xff0c;表示文本信息的。例如:“张三”“李四” 布尔类型&#x…

图解Kafka架构学习笔记(三)

准备Kafka环境 这里推荐使用Docker Compose快速搭建一套本地开发环境。 以下docker-compose.yml文件用来搭建一套单节点zookeeper和单节点kafka环境&#xff0c;并且在8080端口提供kafka-ui管理界面。 version: 2.1services:zoo1:image: confluentinc/cp-zookeeper:7.3.2hos…