【qt】绘图

绘图

  • 一.画家
  • 二.绘图事件
  • 三.坐标体系
  • 四.画笔
    • 1.setColor
    • 2.setWidth
    • 3.setStyle
    • 4.setCapStyle
    • 5.setJoinStyle
    • 6.给画家配置笔
  • 五.画刷
    • 1.setColor
    • 2.setStyle
    • 3.给画家设置刷子
  • 六.用到的类汇总
    • 1.QRect 矩形
    • 2.QPoint 点
    • 3.QImage 图片
    • 4.QPixmap 图片
    • 5.QLine 线
    • 6.QPainterPath 路径
  • 七.开始画画★
    • 1.矩形
    • 2.画刷填充
    • 3.圆角矩形
    • 4.内接椭圆
    • 5.圆弧
    • 6.弦
    • 7.凸多边形
    • 8.多边形
    • 9.image图片
    • 10.pixmap图片
    • 11.线
    • 12.多条线
    • 13.点连线
    • 14.路径
    • 15.扇形
    • 16.点
    • 17.多个点
    • 18.文本
    • 19.擦除
    • 20.填充矩形和路径
  • 八.爽了

一.画家

Qt里面用QPainter来绘图,我们可以形象的理解成一个画家!

二.绘图事件

QWidget里面,绘图的操作都在这个函数里面进行!
在这里插入图片描述

三.坐标体系

easyx一样,左上角为原点
在这里插入图片描述

四.画笔

画家有了,但是我们需要给他画笔,才能真正的可以画画!

1.setColor

设置画笔的颜色

2.setWidth

设置画笔的粗细

3.setStyle

在这里插入图片描述

4.setCapStyle

在这里插入图片描述

5.setJoinStyle

在这里插入图片描述

6.给画家配置笔

void Widget::paintEvent(QPaintEvent *event)
{
    
    QPainter painter(this);//画家
    
    painter.setRenderHint(QPainter::Antialiasing);//使画家画画更平滑
    painter.setRenderHint(QPainter::TextAntialiasing);//使画家写字更平滑
    
    QPen pen;//笔
    pen.setColor(Qt::red);
    pen.setWidth(4);
    pen.setStyle(Qt::SolidLine);
    pen.setCapStyle(Qt::FlatCap);
    pen.setJoinStyle(Qt::BevelJoin);
    
    painter.setPen(pen);//给画家设置笔
       
}

五.画刷

1.setColor

给刷子设置颜色

2.setStyle

在这里插入图片描述

3.给画家设置刷子

    QPainter painter(this);//画家
    QBrush brush;
    brush.setColor(Qt::blue);
    brush.setStyle(Qt::SolidPattern);
    painter.setBrush(brush);//给画家设置刷子

六.用到的类汇总

1.QRect 矩形

2.QPoint 点

3.QImage 图片

4.QPixmap 图片

5.QLine 线

6.QPainterPath 路径

七.开始画画★

1.矩形

     QPainter painter(this);//画家
     QPen pen;
     pen.setColor(Qt::red);
     pen.setWidth(4);

     painter.setPen(pen);
     QRect rect(200,150,400,300);//矩形,前两个参数是左上角坐标,后两个参数是矩形的宽和高
     painter.drawRect(rect);

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

2.画刷填充

     QPainter painter(this);//画家
     QPen pen;
     pen.setColor(Qt::red);
     pen.setWidth(4);
     QBrush brush;
     brush.setColor(Qt::green);
     brush.setStyle(Qt::SolidPattern);
     painter.setBrush(brush);
     painter.setPen(pen);
     QRect rect(200,150,400,300);//矩形,前两个参数是左上角坐标,后两个参数是矩形的宽和高
     painter.drawRect(rect);

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

3.圆角矩形

painter.drawRoundedRect(rect,20,20);//后面两个参数为水平半径和垂直半径

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

4.内接椭圆

painter.drawEllipse(rect);

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

5.圆弧

painter.drawArc(rect,0*16,90*16);//后面两个参数为度数

为什么要乘以16呢,因为qt里面将一度划分成了16份.
我们要想0到90°就需要乘以16,不然就是0~5°左右.
还有qt的0°是3点钟方向开始逆时针的方向.

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

6.弦

painter.drawChord(rect,0*16,-90*16);//可以负号改变方向

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

7.凸多边形

QPoint points[4]={{50,50},{100,200},{200,400},{20,300}};
painter.drawConvexPolygon(points,4);//第二个参数为几个点

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

8.多边形

QPoint points[4]={{50,50},{100,200},{200,400},{20,300}};
painter.drawPolygon(points,4);//第二个参数为几个点

与凸多边形一样,但是更全面!
运行结果:
在这里插入图片描述

9.image图片

     QImage image(":/bg.png");
     QRect rect(200,150,400,300);//矩形,前两个参数是左上角坐标,后两个参数是矩形的宽和高
     painter.drawImage(rect,image);//在矩形区域内显示可拉伸

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

10.pixmap图片

     QPixmap pixmap(":/bg.png");
     QRect rect(200,150,400,300);//矩形,前两个参数是左上角坐标,后两个参数是矩形的宽和高
     painter.drawPixmap(rect,pixmap);//在矩形区域内显示可拉伸

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

11.线

     QLine line(0,0,500,500);
     painter.drawLine(line);

在这里插入图片描述

12.多条线

     QVector<QLine>lines;
     lines.append(QLine(0,0,200,200));
     lines.append(QLine(200,200,500,100));
     painter.drawLines(lines);

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

13.点连线

QPoint point[3]={{0,0},{200,200},{500,100}};
     painter.drawPolyline(point,3);

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

14.路径

     QPainterPath path;
     QRect rect(200,150,400,300);
     path.addRect(rect);
     path.addEllipse(rect);
     painter.drawPath(path);

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

15.扇形

     QRect rect(200,150,400,300);
     painter.drawPie(rect,0,90*16);

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

16.点

     QPoint point(300,300);
     pen.setWidth(20);//设置大点,你们才能看见这个点
     painter.setPen(pen);
     painter.drawPoint(point);

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

17.多个点

QPoint points[4]={{50,50},{100,200},{200,400},{20,300}};
painter.drawPoints(points,4);

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

18.文本

     QFont font;
     font.setPixelSize(30);
     font.setFamily("微软雅黑");
     font.setBold(true);
     painter.setFont(font);//给画笔设置字体
     QRect rect(200,150,400,300);//矩形内显示字体
     painter.drawText(rect,"姚哥");

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

19.擦除

          QImage image(":/bg.png");
          QRect rect(200,150,400,300);//矩形,前两个参数是左上角坐标,后两个参数是矩形的宽和高
          painter.drawImage(rect,image);//在矩形区域内显示可拉伸

          QRect rect1(300,250,200,100);
          painter.eraseRect(rect1);

运行结果:
在这里插入图片描述
原理就是用背景色填充.

          this->setPalette(QPalette(Qt::green));//设置窗口背景色
          QImage image(":/bg.png");
          QRect rect(200,150,400,300);//矩形,前两个参数是左上角坐标,后两个参数是矩形的宽和高
          painter.drawImage(rect,image);//在矩形区域内显示可拉伸

          QRect rect1(300,250,200,100);
          painter.eraseRect(rect1);

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

20.填充矩形和路径

        QRect rect1(200,150,400,300);
        painter.fillRect(rect1,Qt::blue);

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

 QPainterPath path;
 QRect rect(200,150,400,300);
 path.addRect(rect);
 path.addEllipse(rect);
 painter.drawPath(path);
 painter.fillPath(path,Qt::green);

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

八.爽了

学会了绘图.就请想象你是一名画家,请尽情开始你的创制吧!
Show time!

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

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

相关文章

关于用宽带(拨号)连接VPN无法上网,但是wifi或者热点就可以的问题

参考链接&#xff1a;https://zhuanlan.zhihu.com/p/580929250https://zhuanlan.zhihu.com/p/580929250 https://blog.csdn.net/Yaoyao2024/article/details/132245249文章浏览阅读10w次&#xff0c;点赞161次&#xff0c;收藏515次。很多同学在学习访问学校提供的资源时或者一…

selenium自动化测试入门 —— 上传文件

selenium无法识别非web的控件&#xff0c;上传文件窗口为系统自带&#xff0c;无法识别窗口元素。 上传文件有两种场景&#xff1a;input控制上传和非input控件上传。 大多数情况都是input控件上传文件&#xff0c;只有非常少数的使用自定义的非input上传文件。 一、input控…

python实践笔记(一): 模块和包

1. 写在前面 最近在重构之前的后端代码&#xff0c;借着这个机会又重新补充了关于python的一些知识&#xff0c; 学习到了一些高效编写代码的方法和心得&#xff0c;比如构建大项目来讲&#xff0c;要明确捕捉异常机制的重要性&#xff0c; 学会使用try...except..finally&…

mathematica中针对三维图中的颜色和填充透明度进行指定

颜色指定使用的命令为&#xff1a;PlotStyle 填充的透明度使用的命令为&#xff1a;FillingStyle 示例代码&#xff1a; Clear["Global*"] Plot3D[{Sin[x^2 y], Sin[x^2 - y]}, {x, -2, 2}, {y, -2, 2}, PlotStyle -> {Directive[Red, Specularity[White, 100…

车联网安全入门——CAN总线模糊测试

文章目录 车联网安全入门——CAN总线模糊测试介绍主要特点使用场景 模糊测试&#xff08;Fuzz Testing&#xff09;CAN 总线模糊测试&#xff08;CAN Packet Fuzzing&#xff09;主要步骤工具和软件主要目标 Can-Hax安装使用获得指纹模糊测试 SavvyCAN 总结参考 车联网安全入门…

监听DB配置变更之go-broadcast简单实现

文章目录 1. 前言2. 分析3. 实现4. 问题5. 小结6. 参考 1. 前言 之前遇到一个需求&#xff0c;因为配置的查找是基于db的&#xff0c;而db的更改却无法实时通知到具体利用到这条数据的使用方&#xff0c;为了实现db数据变动时&#xff0c;能够尽快让使用方知道这条数据发生了变…

数仓建模中的一些问题

​​​在数仓建设的过程中&#xff0c;由于未能完全按照规范操作&#xff0c; 从而导致数据仓库建设比较混乱&#xff0c;常见有以下问题&#xff1a; 数仓常见问题 ● 数仓分层不清晰&#xff1a;数仓的分层没有明确的逻辑&#xff0c;难以管理和维护。 ● 数据域划分不明确…

排序题+贪心

排序力扣题 一&#xff1a;合并区间 56. 合并区间 方法一&#xff1a;先排序再合并 如图&#xff0c;把区间按照起点从小到达排序&#xff0c;如果起点相同那么按照终点小的优先排序 然后每次记录一个区间&#xff0c;访问下一个区间&#xff1a; 如果下一个区间的起点<前…

使用NetAssist网络调试助手在单台计算机上配置TCP服务器和客户端

要使用NetAssist网络调试助手在同一台计算机上配置一个实例作为服务器&#xff08;server&#xff09;和另一个实例作为客户端&#xff08;client&#xff09;&#xff0c;可以按照以下步骤进行操作&#xff1a; 前提条件 确保已经安装NetAssist网络调试助手&#xff0c;并了…

【十大排序算法】归并排序

归并排序&#xff0c;如同秋日落叶&#xff0c;分散而细碎&#xff0c; 然而风吹叶动&#xff0c;自然而有序&#xff0c; 彼此相遇&#xff0c;轻轻合拢&#xff0c; 最终成就&#xff0c;秩序之谧。 文章目录 一、归并排序二、发展历史三、处理流程四、算法实现五、算法特性…

LLVM Cpu0 新后端4

想好好熟悉一下llvm开发一个新后端都要干什么&#xff0c;于是参考了老师的系列文章&#xff1a; LLVM 后端实践笔记 代码在这里&#xff08;还没来得及准备&#xff0c;先用网盘暂存一下&#xff09;&#xff1a; 链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?…

数据结构和算法之数组和链表

一、数组 数组是一种线性数据结构&#xff0c;它是由一组连续的内存单元组成的&#xff0c;用于存储相同类型的数据。在JavaScript中&#xff0c;数组可以包含任意类型的数据&#xff0c;不只限于基本数据类型。 1.存储方式 在内存中&#xff0c;数组的元素是连续存储的&…

芒果YOLOv10改进38:写作篇:一文了解YOLOv10如何打印FPS指标

只需订阅这一个专栏即可阅读:芒果YOLOv10所有改进内容 💡🚀🚀🚀本博客内含改进源代码,按步骤操作运行改进后的代码即可 💡更方便的统计更多实验数据,方便写作 新增YOLOv10打印FPS指标 完善(一键YOLOv10打印FPS指标) 文章目录 完善(一键YOLOv10打印FPS指标)YOLO…

欧美北美南美国外媒体投稿和东南亚中东亚洲媒体海外新闻发稿软文推广营销策略有哪些?

在当今全球化的浪潮中&#xff0c;中国品牌正积极拓展海外市场&#xff0c;寻求更广阔的发展空间。面对国际竞争&#xff0c;有效的海外媒体发稿营销策略对于品牌国际化至关重要。以下是一些关键点和建议&#xff0c;以帮助品牌在海外市场取得成功。 深入了解目标市场&#xf…

吴恩达神经网络学习笔记1

代码解释 并不是全部代码&#xff0c;思路的流程 import numpy as np# 如何判断咖啡豆是烤好了 # 假设此神经网络由2层构成###### 这部分代码只是如何建立2层网络&#xff0c; ###### 并不包含如何加载神经网络中的参数 w 和 b######################## 第1层网络# x 是…

运维小妙招:如何让系统信息随登录自动展现?

在日常运维工作中&#xff0c;及时获取系统的基本信息对于维护系统的稳定性和安全性至关重要。通过一个简单的登录脚本&#xff0c;我们可以在用户每次登录时自动显示系统的关键信息&#xff0c;这不仅提高了工作效率&#xff0c;还能快速定位问题。本文将介绍如何编写这样一个…

ELK组件

资源列表 操作系统 IP 主机名 Centos7 192.168.10.51 node1 Centos7 192.168.10.52 node2 部署ELK日志分析系统 时间同步 chronyc sources -v 添加hosts解析 cat >> /etc/hosts << EOF 192.168.10.51 node1 192.168.10.52 node2 EOF 部署Elasticsea…

双Token方案实现Token自动续期(基于springboot+vue前后端分离项目)

文章目录 前言一、双Token方案介绍1. 令牌类型与功能2.双Token方案的优点3.实现流程 二、具体实现1.后端实现1.1 jwt工具类1.2 响应工具类1.3 实体类1.4 过滤器1.5 controller1.6 启动类 2、前端实现2.1 登录页面2.2 index页面2.3 请求拦截器和响应拦截器 效果展示 前言 更多j…

rce漏洞试试看 buuctf的pingpingping 试试ctf的rce怎么样

打开靶机开始操作 然后我们先知道一些知识点&#xff1a;下面这些是常用的 |这个管道符也就是上一条的命令的输出结果作为下一条命令的输入&#xff1b;这个是跟sql的堆叠注入是一样的|| || 当前面的执行出错时&#xff08;为假&#xff09;执行后面的 & 将任务置于后台执…

基于pytoch卷积神经网络水质图像分类实战

具体怎么学习pytorch&#xff0c;看b站刘二大人的视频。 完整代码&#xff1a; import numpy as np import os from PIL import Image import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data…