【qt】绘图

news2024/10/6 12:22:37

绘图

  • 一.画家
  • 二.绘图事件
  • 三.坐标体系
  • 四.画笔
    • 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.coloradmin.cn/o/1816213.html

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

相关文章

如何关闭端口被占用的进程

如何关闭端口被占用的进程 操作步骤一、打开命令提示符&#xff08;Command Prompt&#xff09;二、查看占用端口的进程三、kill杀死占用端口的进程 操作步骤 一、打开命令提示符&#xff08;Command Prompt&#xff09; 使用 win R 打开命令行模式 然后在命令行窗口输入下…

【LLM Agent 长文本】Chain-of-Agents与Qwen-Agent引领智能体长文本处理革命

前言 大模型在处理长文本上下文任务时主要存在以下两个问题&#xff1a; 输入长度减少&#xff1a;RAG的方法可以减少输入长度&#xff0c;但这可能导致所需信息的部分丢失&#xff0c;影响任务解决性能。扩展LLMs的上下文长度&#xff1a;通过微调的方式来扩展LLMs的上下文窗…

基于DenseNet网络实现Cifar-10数据集分类

目录 1.作者介绍2.Cifar-10数据集介绍3.Densenet网络模型3.1网络背景3.2网络结构3.2.1Dense Block3.2.2Bottleneck层3.2.3Transition层3.2.4压缩 4.代码实现4.1数据加载4.2建立 DenseNet 网络模型4.3模型训练4.4训练代码4.5测试代码 参考链接 1.作者介绍 吴思雨&#xff0c;女…

搭建自己的多平台镜像站

# 1. 拉取代码 $ git clone https://github.com/wzshiming/crproxy.git $ cd crproxy/examples/default# 2. 修改网关域名 使用vim编辑start.sh文件&#xff0c;将第五行的gateway变量值修改为你自己设定的域名。 原&#xff1a;gatewaycr.zsm.io 修改为&#xff1a;gatewayXS…

go语言 | 快速生成数据库表的 model 和 queryset

就是生成 model 目录的 xxx.go 和 xxx_gen.go 文件 使用的工具&#xff1a; 快速生成 model&#xff1a;gentool&#xff1a;https://github.com/go-gorm/gen/tree/master/tools/gentool 根据 model 生成 queryset&#xff1a;go-queryset&#xff1a;https://github.com/jirfa…

layuimini框架实现点击菜单栏回到起始页

在layui页面中&#xff0c;如果使用了 window.location.href""进行了页面跳转&#xff0c;再点击菜单栏是不会显示起始页&#xff0c;而是跳转后的页面&#xff0c; 解决&#xff1a; 在miniTab.js文件中找到&#xff1a;listen方法 将其中修改为&#xff1a; if …

全球首创4090推理!昆仑万维开源Skywork-MoE模型

昆仑万维近期宣布开源了其2千亿参数规模的稀疏大模型Skywork-MoE。这个模型是基于他们之前开源的Skywork-13B模型中间checkpoint扩展而来的&#xff0c;并且宣称是首个完整应用MoE Upcycling技术的开源千亿MoE大模型。此外&#xff0c;它也是首个支持使用单台RTX 4090服务器&am…

MyBatisPlus代码生成器(交互式)快速指南

引言 本片文章是对代码生成器(交互)快速配置使用流程&#xff0c;更多配置方法可查看官方文档&#xff1a; 代码生成器配置官网 如有疑问欢迎评论区交流&#xff01; 文章目录 引言演示效果图引入相关依赖创建代码生成器对象引入Freemarker模板引擎依赖支持的模板引擎 MyBat…

Day 20:2806. 取整购买后的账户余额

Leetcode 2806. 取整购买后的账户余额 一开始&#xff0c;你的银行账户里有 100 块钱。 给你一个整数purchaseAmount &#xff0c;它表示你在一次购买中愿意支出的金额。 在一个商店里&#xff0c;你进行一次购买&#xff0c;实际支出的金额会向 最近 的 10 的 倍数 取整。换句…

【QT5】<总览二> QT信号槽、对象树及常用函数

文章目录 前言 一、QT信号与槽 1. 信号槽连接模型 2. 信号槽介绍 3. 自定义信号槽 二、QT的对象树 三、添加资源文件 四、样式表的使用 五、QSS文件的使用 六、常用函数与宏 前言 承接【QT5】&#xff1c;总览一&#xff1e; QT环境搭建、快捷键及编程规范。若存在版…

Python使用tkinter库设置背景图片、label显示位置和label设置显示图片

tkinter 设置背景图片 label显示位置 label设置显示图片 from tkinter import * import tkinter as tk from PIL import ImageTk from PIL import Imagedef get_img(filename, width, height):im Image.open(filename).resize((width, height))im ImageTk.PhotoImage(im)…

网络仿真方法综述

目录 1. 引言 2.仿真器介绍 2.1 NS-2 2.2 NS-3 2.3 OPNET 2.4 GNS3 3.仿真对比 4.结论 参考文献 1. 引言 网络仿真是指使用计算机模拟网络系统的行为和性能的过程。在网络仿真中&#xff0c;可以建立一个虚拟的网络环境&#xff0c;并通过模拟各种网络设备、协议和应用程…

this关键字,构造函数(构造器)

文章目录 thisthis是什么应用场景 构造器注意事项代码演示 this this是什么 this就是一个变量&#xff0c;可以在方法中&#xff0c;拿到当前对象 应用场景 解决变量名称 冲突问题 构造器 注意事项 必须和类名相同没有返回值只要参数不同&#xff08;个数不同&#xff0…

【C语言】10.操作符详解

一、操作符分类 • 算术操作符&#xff1a; 、- 、* 、/ 、% • 移位操作符: << 、 >> • 位操作符: & 、|、^、 ~ • 赋值操作符: 、 、 - 、 、 / 、% 、<< 、>> 、& 、| 、^ • 单目操作符&#xff1a; &#xff01;、、–、&、、、…

postman教程-20-Newman安装入门

上一小节我们学习了Postman mock测试的方法&#xff0c;本小节我们讲解一下Postman Newman的安装方法。 Newman是Postman团队开发的一个命令行工具&#xff0c;它允许用户通过命令行接口&#xff08;CLI&#xff09;运行Postman集合&#xff08;Collections&#xff09;和环境…

样式的双向绑定的2种方式,实现样式交互效果

与样式标签实现双向绑定 通过布尔值来决定样式是出现还是消失 show代表着布尔值&#xff0c;show的初始值是false所以文本不会有高亮的效果&#xff0c;当用户点击了按钮&#xff0c;就会调用shows这个函数&#xff0c;并将show的相反值true赋值并覆盖给show,此时show的值为tru…

0602 差分式放大电路

差分式放大电路 差分放大电路的基本概念直接耦合放大电路中的零点漂移 6.2.1 差分式放大的基本概念 6.2.2 直接耦合放大电路中的零点漂移 6.2.3 BJT射极耦合差分式放大电路 差分放大电路的基本概念 直接耦合放大电路中的零点漂移

.NET Core 服务注册步骤总结

总结一下 .NET Core 服务注册的步骤&#xff1a; .NET Core Web Api 项目服务注册步骤&#xff1a; 创建一个接口&#xff0c;和实现类 比如&#xff1a;IMyService, CnService 在 Program.cs 的 var app builder.Build(); 语句之前加上&#xff1a; var builder WebApplic…

鸿蒙开发:【线程模型】

线程模型 线程类型 Stage模型下的线程主要有如下三类&#xff1a; 主线程 执行UI绘制。管理主线程的ArkTS引擎实例&#xff0c;使多个UIAbility组件能够运行在其之上。管理其他线程的ArkTS引擎实例&#xff0c;例如使用TaskPool&#xff08;任务池&#xff09;创建任务或取消…

使用 PNPM 从 0 搭建 monorepo,测试并发布

1 目标 通过 PNPM 创建一个 monorepo&#xff08;多个项目在一个代码仓库&#xff09;项目&#xff0c;形成一个通用的仓库模板。 这个仓库既可以用于公司存放和管理所有的项目&#xff0c;也可以用于将个人班余的所有积累整合其中。 2 环境要求 核心是 PNPM 和 Node.js&…