Qt 绘图详解
文章目录
- 头文件和构造函数
- 启用反锯齿功能
- 绘制矩形
- 绘制圆角矩形
- 绘制椭圆
- 绘制圆弧
- 绘制弦
- 绘制凸多边形
- 绘制图片
- 绘制直线
- 绘制多条直线
- 绘制多点连接的线
- 绘制路径
- 绘制扇形
- 绘制点
- 绘制文本
- 擦除矩形区域
- 填充矩形
- 填充路径
头文件和构造函数
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QPainter>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}
启用反锯齿功能
首先,我们在每个图形的绘制过程中启用反锯齿功能,以保证绘制效果的平滑。
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);// 以下为具体图形的绘制代码
}
绘制矩形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);// 画笔样式pen.setCapStyle(Qt::FlatCap); // 线端点样式pen.setJoinStyle(Qt::BevelJoin); // 线连接点样式// 给画家设置画笔painter.setPen(pen);// 设置画刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);// 给画家设置画刷painter.setBrush(brush);// 绘制矩形QRect rect(60, 60, 400, 400);painter.drawRect(rect);
}
解释:
QPen用于设置画笔的宽度、颜色、线端点样式和连接点样式。QBrush用于设置填充颜色和样式。QRect定义了矩形的尺寸和位置。painter.drawRect(rect)使用指定的画笔和画刷绘制矩形。
绘制圆角矩形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 设置画刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 绘制圆角矩形QRect roundedRect(20, 20, 400, 300);painter.drawRoundedRect(roundedRect, 20, 20);
}
解释:
painter.drawRoundedRect绘制带圆角的矩形。20, 20指定了圆角的水平和垂直半径。
绘制椭圆
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 设置画刷QBrush brush;brush.setColor(Qt::yellow);brush.setStyle(Qt::SolidPattern);painter.setBrush(brush);// 绘制椭圆QRect ellipseRect(20, 20, 400, 300);painter.drawEllipse(ellipseRect);
}
解释:
painter.drawEllipse使用指定的矩形边界绘制椭圆。
绘制圆弧
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制圆弧QRect arcRect(20, 20, 400, 400);// 起始角和伸缩角必须以1/16度指定,即一个完整的圆等于5760(16 * 360)。// 角度的正值表示逆时针方向,负值表示顺时针方向// 零度在3点钟方向(参考手表的位置)painter.drawArc(arcRect, 0 * 16, 90 * 16);
}
解释:
painter.drawArc绘制圆弧。0 * 16和90 * 16分别表示起始角度和跨越角度,单位为1/16度。
绘制弦
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制弦QRect chordRect(20, 20, 400, 400);painter.drawChord(chordRect, 0 * 16, 120 * 16);
}
解释:
painter.drawChord绘制弦,弦是一个连接圆弧两个端点的线段。
绘制凸多边形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制凸多边形QPoint convexPoints[4] = {{50, 100},{100, 50},{500, 160},{110, 400}};painter.drawConvexPolygon(convexPoints, 4);
}
解释:
painter.drawConvexPolygon绘制凸多边形。QPoint数组定义了多边形的顶点。
绘制图片
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 绘制图片QRect imageRect(10, 10, 400, 300);QImage image(":/JINGMAO.jpg");painter.drawImage(imageRect, image);
}
解释:
painter.drawImage在指定的矩形区域内绘制图片。
绘制直线
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制直线QLine line(50, 50, 400, 400);painter.drawLine(line);
}
解释:
QLine定义了直线的起点和终点。painter.drawLine绘制直线。
绘制多条直线
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制多条直线QRect rect(50, 50, 400, 300);QVector<QLine> lines;lines.append(QLine(rect.topLeft(), rect.topRight()));lines.append(QLine(rect.bottomLeft(), rect.topRight()));lines.append(QLine(rect.topLeft(), rect.bottomRight()));painter.drawLines(lines);
}
解释:
QVector<QLine>用于存储多条直线。painter.drawLines绘制多条直线。
绘制多点连接的线
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制多点连接的线QPoint points[5] = {{50, 100},{100, 50},{500, 160},{200, 200},{110, 400}};painter.drawPolyline(points, 5);
}
解释:
QPoint数组定义了
多点连接的线的顶点。
painter.drawPolyline绘制多点连接的线。
绘制路径
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制路径QRect rect(50, 50, 400, 300);QPainterPath path;path.addEllipse(rect);path.addRect(rect);painter.drawPath(path);
}
解释:
QPainterPath用于定义复杂的路径。painter.drawPath绘制由QPainterPath对象定义的路径。
绘制扇形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制扇形QRect rect(50, 50, 400, 300);painter.drawPie(rect, 0 * 16, 120 * 16); // 0 度是 3 点钟方向
}
解释:
painter.drawPie绘制扇形。
绘制点
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 绘制单个点painter.drawPoint(QPoint(100, 200));// 绘制多个点QPoint points[4] = {{50, 100},{100, 50},{500, 160},{110, 400}};painter.drawPoints(points, 4);
}
解释:
painter.drawPoint绘制单个点。painter.drawPoints绘制多个点。
绘制文本
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 设置字体QFont font;font.setFamily("微软雅黑");font.setPointSize(30);font.setBold(true);painter.setFont(font);// 绘制文本QRect rect(100, 100, 400, 200);painter.drawText(rect, "刘琴小宝贝");
}
解释:
QFont设置字体属性。painter.drawText在指定的矩形区域内绘制文本。
擦除矩形区域
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 绘制图片QRect rect(10, 10, 400, 300);QImage image(":/JINGMAO.jpg");painter.drawImage(rect, image);// 设置窗口背景色setPalette(QPalette(Qt::red));// 擦除矩形区域QRect rect2(100, 100, 200, 100);painter.eraseRect(rect2);
}
解释:
painter.eraseRect擦除指定的矩形区域内容。
填充矩形
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 填充矩形QRect rect(10, 10, 400, 300);painter.fillRect(rect, Qt::blue);
}
解释:
painter.fillRect使用指定的颜色填充矩形区域。
填充路径
void MainWindow::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);// 设置画笔QPen pen;pen.setWidth(3);pen.setColor(Qt::red);painter.setPen(pen);// 定义路径并填充QRect rect(10, 10, 400, 300);QPainterPath path;path.addRect(rect);path.addEllipse(rect);painter.fillPath(path, Qt::blue);
}
解释:
QPainterPath用于定义复杂的路径。painter.fillPath使用指定的颜色填充路径。
通过以上这些代码示例和详细解释,相信你已经掌握了在Qt中进行各种图形绘制的方法。Qt的绘图功能非常强大,能够满足各种复杂的绘图需求。
相关文章:
Qt 绘图详解
文章目录 头文件和构造函数启用反锯齿功能绘制矩形绘制圆角矩形绘制椭圆绘制圆弧绘制弦绘制凸多边形绘制图片绘制直线绘制多条直线绘制多点连接的线绘制路径绘制扇形绘制点绘制文本擦除矩形区域填充矩形填充路径 头文件和构造函数 #include "mainwindow.h" #include…...
Python 爬虫与 Java 爬虫:相似之处、不同之处和选项
在信息时代,网络上可用的数据量巨大且不断增长。为了从这些数据中提取有用的信息,爬虫已成为一种重要的技术。Python 和 Java 都是流行的编程语言,都具有强大的爬虫功能。本文将深入探讨 Python 爬虫和 Java 爬虫之间的差异,以帮助…...
视频监控汇聚平台LntonCVS视频监控系统解决智慧产业园的安全应用方案
近年来,随着全国各地数字化转型和相关政策的出台,数字化和智慧化在各行业迅速发展,尤其是作为产业集群重要组成部分的产业园区。然而,园区智慧化进程加快的同时,数字化转型面临着诸如视频监控数据分散、联通不畅、碎片…...
MAVLink代码生成-C#
一. 准备Windows下安装环境 Python 3.3 – 官网链接下载Python future模块 –pip3 install future TkInter (GUI 工具). – python for Windows自带,无需下载环境变量PYTHONPATH必须包含mavlink存储库的目录路径。 –set PYTHONPATH你的mavlink源码路径 源码下载在…...
二四、3d人脸构建
一、下载github项目3dmm_cnn-master https://github.com/anhttran/3dmm_cnn.git 一个使用深度神经网络从单个图像进行 3D 人脸建模的项目,端到端代码,可直接根据图像强度进行 3D 形状和纹理估计;使用回归的 3D 面部模型,从检测到的面部特征点估计头部姿势和表情。…...
鸿蒙开发:Universal Keystore Kit(密钥管理服务)【加解密(C/C++)】
加解密(C/C) 以AES 256密钥为例,完成加解密。具体的场景介绍及支持的算法规格。 在CMake脚本中链接相关动态库 target_link_libraries(entry PUBLIC libhuks_ndk.z.so)开发步骤 生成密钥 指定密钥别名。初始化密钥属性集。调用OH_Huks_GenerateKeyItem生成密钥)…...
Python的入门知识(上)
学习目标: 了解python 入门知识 这里写目录标题 学习目标:学习内容:快速入门 Python 基础特殊规则及特殊字符:Python 文件组织:多元赋值:变量命名规则:__name__ 系统变量:内存管理&a…...
2024春秋杯网络安全联赛夏季赛-PWN
文章目录 stdout测试setvbuf(stdout, 0LL, 2, 0LL)绕过或者输出直到缓冲区满使用system("/bin/sh")或者onegadget即使setvbuf(stdout, 0LL, 0, 0LL);也能立即有回显参考[https://starrysky1004.github.io/2024/07/05/2024-shu-qi-xue-xi-ji-lu/#toc-heading-4](https…...
怎么提高音频声音大小?提高音频声音大小的四种方法
怎么提高音频声音大小?在音频处理和编辑中,增加声音的音量是一个常见的需求,尤其是在确保音频清晰度和听觉效果的同时。调整音频的音量不仅仅是简单地提高音频的响度,它也涉及到如何保持音质的高标准,确保没有失真或削…...
从数据仓库到数据湖(下):热门的数据湖开源框架
文章目录 一、前言二、Delta Lake三、Apache Hudi四、Apache Iceberg五、Apache Paimon六、对比七、笔者观点八、总结九、参考资料 一、前言 在上一篇从数据仓库到数据湖(上):数据湖导论文章中,我们简单讲述了数据湖的起源、使用原因及其本质。本篇文章…...
对话AI原生 | 千帆AppBuilder重构企业AI原生应用开发体验
人工智能和大模型正在引领当前最重要的科技创新趋势。在过去的一年中,行业关注点已从大模型研发转向实际应用,正成为推动创新和转型的关键力量。百度智能云千帆AppBuilder作为基于大模型的企业级AI原生应用开发工作台,支持应用的快速开发和发…...
CF253C Text Editor 题解
思路 既然要求最少步数,那我们可以用bfs 如果鼠标的位置比上一行的行末位置大,如果按上的话,移到上一行的行末。如果鼠标的位置比下一行的行末位置大,如果按下的话,移到下一行的行末。 注意当鼠标位置超过当前行最大…...
Spring Boot 创建定时任务
在现代应用程序开发中,定时任务是一个常见的需求。Spring Boot作为一个强大的框架,提供了简单易用的定时任务调度功能。本文将详细介绍如何在Spring Boot中创建和管理定时任务,并提供完整的代码示例。 1. 什么是定时任务 定时任务是指在预定…...
Vue使用Echarts(入门级)
最终效果: npm install echarts --save // 先安装echarts<template><!-- 创建一个dom区域用于挂载echarts图表 --><div id"chart" style"width: 600px;height:500px;"/> </template> <script> import * as ech…...
2025届秋招提前批信息汇总(计算机类)
私企篇 深信服 链接:https://app.mokahr.com/campus_apply/sangfor/27944#/home内推码:NTAHRFS截止时间:6月21日 TP-LINK 链接:https://hr.tp-link.com.cn/jobList?jobId107&jobDirection0&workPlace0¤tPa…...
Scala Collection(集合)
Scala Collection(集合) Scala集合库是Scala语言的核心特性之一,它提供了一套丰富的数据结构来存储、管理和操作数据。Scala集合分为可变(mutable)和不可变(immutable)两种类型,每种类型都有其特定的用途和优势。本文将详细介绍Scala集合库的基本概念、常用集合类型以及…...
Go 语言 UUID 库 google/uuid 源码解析:UUID version4 的实现
google/uuid 库地址 本文将解析 googl/uuid 库中 UUID 变体10版本4的实现。 版本 4 的 UUID 采取完全随机的方式实现,简单来说就是将 UUID 中的 122 位全部随机填充(剩余的 6 位作标记位)。版本 4 的 UUID 存在一定的重复风险,但…...
开发个人Go-ChatGPT--6 OpenUI
开发个人Go-ChatGPT–6 OpenUI Open-webui Open WebUI 是一种可扩展、功能丰富且用户友好的自托管 WebUI,旨在完全离线运行。它支持各种 LLM 运行器,包括 Ollama 和 OpenAI 兼容的 API。 功能 由于总所周知的原由,OpenAI 的接口需要密钥才…...
Spring中的工厂模式详解及应用示例
1. Spring中的BeanFactory BeanFactory是一个接口,表示它是一个工厂,负责生产和管理bean。在Spring中,BeanFactory是IOC容器的核心接口,定义了管理Bean的通用方法,如 getBean 和 containsBean。 BeanFactory与IOC容器…...
Electron 简单搭建项目
准备工作 全局安装 node npm创建文件夹,并执行 npm init安装 electron npm i electron --save-dev在 package.json 配置文件中的scripts字段下增加一条start命令: {"scripts": {"start": "electron ."} }由于配置中的入…...
CH340系列芯片选型指南与外围电路设计实战
1. CH340系列芯片选型指南 第一次接触CH340系列芯片时,我被它丰富的型号搞得眼花缭乱。作为国内最常用的USB转串口芯片之一,CH340系列凭借稳定的性能和亲民的价格,在嵌入式开发领域占据重要地位。但面对十几种不同型号,新手往往会…...
校园网免认证上网?手把手教你用UDP53端口搭建自己的“网络后门”(附服务器配置)
校园网络优化:UDP53端口的高效应用实践 校园网络作为师生日常学习生活的重要基础设施,其稳定性和访问效率直接影响着教学科研活动的开展。本文将深入探讨一种基于UDP53端口的网络优化方案,帮助技术爱好者理解并实现更流畅的网络体验。 1. 校园…...
基于springboot运动服装销售系统设计与开发(源码+精品论文+答辩PPT等资料)
博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...
Wan2.1-umt5能力展示:模拟计算机组成原理教学问答
Wan2.1-umt5能力展示:模拟计算机组成原理教学问答 最近在尝试用大模型辅助教学,发现了一个挺有意思的镜像——Wan2.1-umt5。它不像常见的聊天模型,更像是一个专门为理解和生成专业内容设计的“专家”。我突发奇想,让它扮演了一回…...
Gemma-3 Pixel Studio镜像免配置:开箱即用的12B多模态推理工作站
Gemma-3 Pixel Studio镜像免配置:开箱即用的12B多模态推理工作站 1. 产品概览 Gemma-3 Pixel Studio是基于Google最新开源Gemma-3-12b-it模型构建的高性能多模态对话终端。这个预配置的Docker镜像消除了复杂的部署流程,让用户能够立即体验12B参数大模型…...
hot100——二分查找
4.寻找两个正序数组的中位数解题思路首先,题目中已经说明,是正序,那么nums1以及nums2中都是从小到大进行排列的;又因为题目中要求时间复杂度为O(log(mn)),一般看到这种时间复杂度是O(log……)形式的,基本上…...
大数据产品实战:用户画像系统的设计与实现
大数据产品实战:用户画像系统的设计与实现 关键词:用户画像、标签体系、大数据平台、精准营销、数据挖掘 摘要:用户画像系统是大数据时代企业实现“以用户为中心”运营的核心工具,它通过给用户“贴标签”的方式,将复杂的用户行为转化为可量化、可分析的数字特征。本文将从…...
3分钟快速修复机械键盘连击问题:终极解决方案指南
3分钟快速修复机械键盘连击问题:终极解决方案指南 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker KeyboardChatterBlocker是…...
三菱PLC与MCGS组态农田智能灌溉系统:后发送产品包括梯形图原理图、IO分配及组态画面解析
基于三菱PLC和MCGS组态农田智能灌溉系统 我们主要的后发送的产品有,带解释的梯形图接线图原理图图纸,io分配,组态画面上周刚把农田智能灌溉的项目收尾,把资料打包发给客户的时候,终于能瘫在椅子上喝杯冰可乐了。这个…...
别再为IP冲突头疼!YOLOv5+海康威视摄像头组网与实时检测的完整避坑指南
工业视觉组网实战:YOLOv5与海康威视摄像头的智能协同方案 在智能制造与安防监控领域,将AI算法与专业摄像设备结合已成为技术标配。但当工程师真正着手部署时,往往会陷入网络配置的泥潭——IP冲突导致设备失联、RTSP流媒体断断续续、多网卡环…...
