QT绘图

QPainter

paintEvent是Qt中一个非常重要的函数,它是QWidget类的一个事件处理函数,用于处理小部件的绘制事件。当Qt认为小部件需要重绘时(例如,窗口首次出现时,大小改变时,或者调用了小部件的update()方法时),paintEvent就会被自动调用。

使用paintEvent的基本步骤

  1. 重写paintEvent函数:要在你的小部件上进行自定义绘图,你需要在你的小部件类中重写paintEvent函数。

  2. 创建QPainter对象QPainter是Qt中用于所有绘图操作的类。在paintEvent中,你需要创建一个QPainter对象,并将其与要绘制的小部件(通常是this指针)关联起来。

  3. 使用QPainter进行绘图QPainter提供了一系列方法来绘制形状(如线条、矩形、圆形等)、文本和图像。你可以在paintEvent函数中使用这些方法来实现你的绘图逻辑。

  4. 结束绘图:当你完成绘图后,QPainter对象会在离开作用域时自动销毁,此时所有的绘图操作都会被提交到屏幕上。

画矩形

QRectF是Qt框架中的一个类,用于表示矩形的位置和大小。与QRect相比,QRectF使用浮点数来表示坐标和尺寸,这允许进行更精确的图形绘制和布局计算。QRectF主要用于图形和界面元素的布局管理,以及在绘图操作中指定元素的位置和大小

画圆弧

drawArc函数是QPainter类的一个成员函数,用于在图形界面上绘制一个弧线。弧线是从椭圆中截取的一部分,定义了起始角度和跨越的角度范围。此函数非常适用于绘制圆形的一部分、圆环或者任何需要弧形的场景。

画椭圆

画多边形

QPolygon是Qt框架中的一个类,用于表示一个多边形。这个类提供了一系列的方法来操作多边形的顶点,使得它非常适合用于图形绘制和界面设计中处理多边形形状。QPolygon基本上是一个包含QPoint对象的列表,每个QPoint代表多边形的一个顶点。QPolygon提供了各种方法来添加、移除或修改其顶点,以及进行其他操作如多边形的平移和缩放。

画路径

FillRule是Qt中用来决定如何填充(绘制内部)一个图形(特别是复杂图形和路径)的规则。在Qt中,FillRule主要应用于QPainterPath类,它定义了填充路径时如何判断路径内部和外部的规则,从而影响图形的填充效果。FillRule对于处理自相交的路径或者多个子路径组合成的复杂图形尤其重要。

Qt提供了两种FillRule

Qt::WindingFill(默认)

  • 非零环绕规则:这个规则通过计算一个点到图形各边缘的线段的环绕数来决定该点是否在图形内部。简单来说,对于任意给定的点,从该点出发画一条射线,然后检查这条射线与路径的交点,根据交点处路径的方向增加或减少环绕数。如果最终环绕数非零,则认为该点在路径内部,应被填充。这个规则能够正确处理大多数自相交的图形。

Qt::OddEvenFill

  • 奇偶规则:对于给定的点,同样从该点出发画一条任意射线,计算射线与路径的交点数。如果这个数是奇数,点被认为是在图形内部;如果是偶数,认为是在外部。这个规则对于某些特定的图形布局更加直观,特别是当路径自相交时。
QPainterPath path;
path.setFillRule(Qt::OddEvenFill);

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【硬件相关】IB网/以太网基础介绍及部署实践

文章目录 一、前言1、Infiniband网络1.1、网络类型1.2、网络拓扑1.3、硬件设备1.3.1、网卡1.3.2、连接线缆a、光模块b、线缆 1.3.4、交换机 2、Ethernet网络 二、部署实践(以太网)1、Intel E810-XXVDA21.1、网卡信息1.2、检查命令1.2、驱动编译 2、Mella…

SQLPro Studio:数据库管理的革命性工具 mac版

SQLPro Studio是一款强大的数据库管理和开发工具,它旨在提供高效、便捷和安全的数据库操作体验。无论是数据库管理员、开发人员还是数据分析师,SQLPro Studio都能满足他们在数据库管理、查询、设计和维护方面的需求。 SQLPro Studio mac版软件获取 首先…

低密度奇偶校验码LDPC(八)——QC-LDPC译码器FPGA设计概要

往期博文 低密度奇偶校验码LDPC(一)——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC(二)——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC(三)——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

Python环境搭建:一站式指南

在当前AIGC技术蓬勃发展的背景下,Python作为人工智能领域最受青睐的编程语言之一,成为我们必须掌握的技能。因此,搭建一个适合自己的Python环境成为了每个Python开发者的首要任务。本文将为您提供一站式的Python环境搭建指南,帮助…

JVM(5)

垃圾回收相关 垃圾收集器 警告:纯八股文! 如果说上面我们讲的收集算法是内存回收的方法论,那么垃圾收集器就是内存回收的具体体现. 垃圾收集器的作用:垃圾收集器是为了保证程序能够正常,持久运行的一种技术,它是将程序中不用的死亡对象也就是垃圾对象进行清除,从而保证新的…

Godot自定义控件样式语法解析

前言 本篇原始文章写于2023年8月7日,存储在我的语雀文档中。但是语雀分享有诸多不便,为了让更多Godoter更轻松的搜到和看到,就转过来了。 这个项目我上传了Github,后续会贴上链接。 概述 Godot控件体系存在的问题之一就是样式无…

链表OJ刷题(二)

制作不易,三连支持一下呗!!! 文章目录 前言一、链表的回文结构二、相交链表三、链表中倒数第k个节点四、环形链表Ⅰ和Ⅱ总结 前言 一、链表的回文结构 链表的回文结构_牛客题霸_牛客网 这里我们需要先了解一下什么叫做回文&#…

Rocky Linux 运维工具 dnf

一、dnf的简介 dnf​是用于在基于RPM包管理系统的包管理工具。用户可以通过 ​yum​来搜索、安装、更新和删除软件包,自动处理依赖关系,它是yum的继任者,旨在提供更快速、更现代化的软件包管理体验。。 二、dnf 的参数说明 序号参数描述1in…

django项目 法律法规管理系统

1.项目结构 2.项目需求 1.用户管理模块 2.数据采集模块 3.知识管理模块 4.智能匹配模块 5.个人收藏模块 6.数据分析模块 7.页面展示模块 3.知识点 1.智能匹配模块推荐算法的实现原理 TF (Term Frequency):词频,表示一个词在文档中出现的频…

LeetCode --- 长度最小的子数组(滑动窗口)

前言 滑动窗口算法是一种用于解决数组或者列表中子数组或者字串问题的方法,通常用于在给定数据上执行连续区间的操作,算法基本思想是维护一个固定大小或不定大小的窗口,通过移动窗口的起始位置和结束位置来遍历整个数据。在每个窗口位置&…

重拾前端基础知识:JavaScript

重拾前端基础知识:JavaScript 前言使用JavaScript输出语法运算符条件语句循环数据类型字符串数字数组对象日期函数 数学正则表达式异常处理类集合模块JSON闭包异步调试DOM(文档对象模型)事件事件监听器表单 BOM(浏览器对象模型&am…

【Linux杂货铺】调试工具gdb的使用

目录 🌈前言🌈 📁背景介绍 📁 使用 list [行号] / [函数名] run/r break/b [行号] / [函数名] info break disable break enable break delete break [断点编号] next/n step/s continue/c finish print/p [变量…

旧的Spring Security OAuth已停止维护,全面拥抱新解决方案Spring SAS

Spring Authorization Server 替换 Shiro 指引 背景 Spring 团队正式宣布 Spring Security OAuth 停止维护,该项目将不会再进行任何的迭代 目前 Spring 生态中的 OAuth2 授权服务器是 Spring Authorization Server 已经可以正式生产使用作为 SpringBoot 3.0 的最新…

Redis--事务机制的详解及应用

Redis事务的概念: Redis事务就是将一系列命令包装成一个队列,在执行时候按照添加的顺序依次执行,中间不会被打断或者干扰,在执行事务中,其他客户端提交的命令不可以插入到执行事务的队列中,简单来说Redis事…

Springboot接口参数校验

在设计接口时我们通常需要对接口中的非法参数做校验,以降低在程序运行时因为一些非法参数而导致程序发生异常的风险,例如登录的时候需要校验用户名密码是否为空,创建用户的时候需要校验邮件、手机号码格式是否准确。如果在代码中对接口参数一…

AOP案例(黑马学习笔记)

需求 需求:将案例中增、删、改相关接口的操作日志记录到数据库表中 ● 就是当访问部门管理和员工管理当中的增、删、改相关功能接口时,需要详细的操作日志,并保存在数据表中,便于后期数据追踪。 操作日志信息包含: ●…

基于HT32的智能家居demo(蓝牙上位机)

参加合泰杯作品的部分展示,基于HT32的智能家居,这里展示灯光的相关控制,是用蓝牙进行的数据透传,参考了一些资料,美化封装了一下之前的上位机界面。 成果展示 点击主界面的蓝牙设置,进行连接,下…

Android和Linux的嵌入式开发差异

最近开始投入Android的怀抱。说来惭愧,08年就听说这东西,当时也有同事投入去看,因为恶心Java,始终对这玩意无感,没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业,所以只能回过头又来学。 首先还是…

编码规则转换

思考: 如何将一个机内码转换为区内码? 只要将机内码减去 A0A0 就可以啦 如果只让我们用加法器来解决呢? 注意我们的数据占用了 32 位,如果想用补码进行减法运算的话,符号位怎么办??&#xf…

了解Spring中Bean:配置与作用域

作为一名对技术充满热情的学习者,我一直以来都深刻地体会到知识的广度和深度。在这个不断演变的数字时代,我远非专家,而是一位不断追求进步的旅行者。通过这篇博客,我想分享我在某个领域的学习经验,与大家共同探讨、共…