【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.mzph.cn/pingmian/25619.shtml

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

相关文章

河海大学上岸经验分享!

这个系列会邀请上岸学长学姐进行经验分享~ 今天分享经验的同学&#xff0c;二战上岸河海大学。 经验分享 大家好&#xff0c;先介绍一下我自己吧&#xff0c;我本科双非院校&#xff0c;电子信息工程专业。我是一名二战考生&#xff0c;23年当时疫情发高烧&#xff0c;总分3…

aabb c++

题目描述 查找形如"aabb"的四位完全平方数&#xff0c;也即前两位数字相同&#xff0c;后两位数字也相同。 输入 无 输出 若干行&#xff0c;每行一个符合条件的四位数&#xff08;从小到大&#xff09;。 分析&#xff1a; 完全平方数&#xff1a; &#xff…

.Net 使用 MongoDB

安装nuget包 MongoDB.Driver 简单代码 using MongoDB.Bson; using MongoDB.Driver; using System.Buffers; using System.Collections.Concurrent; using System.Diagnostics;namespace ConsoleApp4 {internal class Program{static void Main(string[] args){var client = ne…

Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作?

文章目录 Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作&#xff1f; Solidity选择使用 require 语句还是条件语句结合手动触发 revert 操作&#xff1f; IERC721 nft IERC721(nftAddress); // 声明IERC721接口合约变量 if (nft.getApproved(tokenId)…

中国蚁剑 安装教程 2024年5月

2024/5/11 中国蚁剑 安装教程 一、下载中国蚁剑的加载器和核心源码&#xff08;两个都要用到&#xff09; github官方下载地址&#xff1a;https://github.com/AntSwordProject/ 参考文档&#xff1a;antSword/README_CN.md at master AntSwordProject/antSword GitHub 核…

计算机视觉与深度学习实战,Python为工具,基于语音识别的信号灯图像模拟控制技术

计算机视觉与深度学习在实战中的应用广泛,特别是在结合语音识别技术的信号灯图像模拟控制系统中,这种技术的结合展现出了极大的潜力和应用价值。以下将基于Python工具,对计算机视觉与深度学习在信号灯图像模拟控制中的应用进行详细阐述,并特别关注语音识别技术的整合。 一、…

#10 解决Stable Diffusion常见问题和错误

文章目录 前言1. 环境配置错误问题描述解决方案 2. 模型加载失败问题描述解决方案 3. 图像生成质量差问题描述解决方案 4. 生成速度慢问题描述解决方案 5. 内存不足错误问题描述解决方案 结论 前言 Stable Diffusion是一种先进的AI图像生成工具&#xff0c;它允许用户基于文本…

Golang-分离式加载器(传参)AES加密

目录 enc.go 生成: dec.go --执行dec.go...--上线 cs生成个c语言的shellcode. enc.go go run .\enc.go shellcode 生成: --key为公钥. --code为AES加密后的数据, ----此脚本每次运行key和code都会变化. package mainimport ("bytes""crypto/aes"&…

【数据结构与算法】使用数组实现栈:原理、步骤与应用

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 &#x1f384;栈&#xff08;Stack&#xff09;是什么&#xff1f; &#x1…

【TensorFlow深度学习】值函数估计:蒙特卡洛方法与TD学习

值函数估计&#xff1a;蒙特卡洛方法与TD学习 值函数估计&#xff1a;蒙特卡洛方法与TD学习的深度探索蒙特卡洛方法时序差分学习(TD)Python代码示例结论 值函数估计&#xff1a;蒙特卡洛方法与TD学习的深度探索 在强化学习的奇妙世界里&#xff0c;值函数估计扮演着至关重要的…

windows系统下安装fnm

由于最近做项目要切换多个node版本&#xff0c;查询了一下常用的有nvm和fnm这两种&#xff0c;对比了一下选择了fnm。 下载fnm 有两种方式&#xff0c;目前最新版本是1.37.0&#xff1a; 1.windows下打开powershell&#xff0c;执行以下命令下载fnm winget install Schniz.f…

机器学习--线性模型和非线性模型的区别?哪些模型是线性模型,哪些模型是非线性模型?

文章目录 引言线性模型和非线性模型的区别线性模型非线性模型 总结线性模型非线性模型 引言 在机器学习和统计学领域&#xff0c;模型的选择直接影响到预测的准确性和计算的效率。根据输入特征与输出变量之间关系的复杂程度&#xff0c;模型可以分为线性模型和非线性模型。线性…

体素技术在AI绘画中的革新作用

随着人工智能技术的不断进步&#xff0c;AI绘画已经成为艺术创作和视觉设计领域的一大趋势。在众多推动AI绘画发展的技术中&#xff0c;体素技术以其独特的优势&#xff0c;正在逐渐改变着我们对计算机生成图像的认识。本文旨在探讨体素技术在AI绘画中的应用与影响&#xff0c;…

ChatGPT Prompt技术全攻略-总结篇:Prompt工程技术的未来发展

系列篇章&#x1f4a5; No.文章1ChatGPT Prompt技术全攻略-入门篇&#xff1a;AI提示工程基础2ChatGPT Prompt技术全攻略-进阶篇&#xff1a;深入Prompt工程技术3ChatGPT Prompt技术全攻略-高级篇&#xff1a;掌握高级Prompt工程技术4ChatGPT Prompt技术全攻略-应用篇&#xf…

在 Ubuntu 中安装 Docker

在 Ubuntu 中安装 Docker 首先&#xff0c;更新你的 Ubuntu 系统。 1、更新 Ubuntu 打开终端&#xff0c;依次运行下列命令&#xff1a; $ sudo apt update $ sudo apt upgrade $ sudo apt full-upgrade 2、添加 Docker 库 首先&#xff0c;安装必要的证书并允许 apt 包…

【玩转C语言】第四讲--->操作符与循环语句

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 引言&#xff1a; 大家好&#xff0c;我是坊钰&#xff0c;为了让大家深入了解C语言&#xff0c;我开创了【玩转C语言系列】&#xff0c;将为大家介绍C语言相关知识…

【Android面试八股文】在Java中传参数时是将值进行传递,还是传递引用?

在Java中传参数时是将值进行传递,还是传递引用? 这道题想考察什么? 是否了解什么是值传递和引用传递与真实场景使用,是否熟悉什么是值传递和引用传递在工作中的表现是什么? 考察的知识点 什么是值传递和引用传递的概念,两者对开发中编写的代码的影响 考生应该如何回…

IO缓冲流

目录 字节缓冲流 字符缓冲流 构造方法 字符缓冲流特有方法 BufferedReader(Reader r) Bufferedwriter(Writer r) 综合练习 1、四种方式拷贝文件&#xff0c;并统计各自用时字节流的基本流:一次读写一个字节 2、恢复出师表的顺序 3、当程序运行超过3次时给出提示:本软…

分割等和子集 - LeetCode 热题 89

大家好&#xff01;我是曾续缘&#x1f49a; 今天是《LeetCode 热题 100》系列 发车第 89 天 动态规划第 9 题 ❤️点赞 &#x1f44d; 收藏 ⭐再看&#xff0c;养成习惯 分割等和子集 给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集&am…

Langchain的向量存储 - Document示例代码里的疑问

文章目录 前言一、语句分析二、 举例解释三、 完整代码总结 前言 之前的代码里有下面这句话&#xff0c;可能有看不明白的读者。 vectors [embeddings.embed(doc.page_content) for doc in docs]今天一起来看下这句话。 一、语句分析 这句话实际上是一个列表推导式&#x…