当前位置: 首页 > news >正文

【Qt 基础】绘图

画笔

QPen pen;
pen.setWidth(3); // 线条宽度
pen.setColor(Qt::red);// 画笔颜色
pen.setStyle(Qt::DashLine);// 线条样式
pen.setCapStyle(Qt::RoundCap);// 线端样式
pen.setJoinStyle(Qt::BevelJoin);// 连接样式
painter.setPen(pen);

线条
在这里插入图片描述

线端

在这里插入图片描述

连接

在这里插入图片描述

画刷

    QBrush brush;brush.setColor(Qt::yellow);// 颜色brush.setStyle(Qt::SolidPattern);// 样式brush.setTexture(QPixmap &pixmap);// 设置画刷图片

在这里插入图片描述

渐变

     QRadialGradient rg(W/2,H/2,qMax(W/8,H/8),W/2,H/2);rg.setColorAt(0,Qt::green);rg.setColorAt(1,Qt::blue);rg.setSpread(QGradient::ReflectSpread);
QLinearGradient
QRadialGradient
QConicalGradient

在这里插入图片描述

渐变模式

PadSpread
RepeatSpread
ReflectSpread

在这里插入图片描述

画家

可以画不同的基本图形元件

更复杂的图形用QPainterPath

对画家的操作

painter.rotate(15);//旋转
painter.translate(20,20);//平移
painter.scale(0.5,0.5);//坐标缩放
painter.shear(0.5,0.5);//扭转变换painter.save();
painter.rotate(15);//旋转
painter.restore();
painter.drawRect(rect);

视口和窗口

物理设备提供最基本的坐标系,

通过各种变换得到逻辑坐标系,

为了更方便的操作,出现了视口坐标系和窗口坐标系,

视口表示绘图设备的任意一个矩形区域的物理坐标,默认情况下为整个绘图设备区域。

窗口与视口是同一个矩形,可以重新定义矩形区域的逻辑坐标。

视口设置为painter.setViewport(50,0,200,200),即物理设备的(50,0)为左上角,绘制一个200的正方形,改形状为视口。但坐标系与物理坐标系一致。

然后使用painter.setViewport(-50,-50,100,100)这里定义(50,0)(-50,-50)且对长宽做了缩放,这里是缩小了,缩小到(100,100),以后的操作都是在100$\times$100的空间进行。
在这里插入图片描述

    QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing);painter.setRenderHint(QPainter::TextAntialiasing);int W = this->width();int H  = this->height();qDebug()<<W<<" "<< H;int side = qMin(W,H);QRect rect((W-side)/2,(H-side)/2,side,side);painter.drawRect(rect);painter.setViewport(rect);painter.setWindow(-100,-100,200,200);QPen pen;pen.setWidth(2);pen.setColor(Qt::red);pen.setStyle(Qt::SolidLine);painter.setPen(pen);QLinearGradient linearGrad(0,0,100,0);linearGrad.setColorAt(0,Qt::yellow);linearGrad.setColorAt(1,Qt::green);linearGrad.setSpread(QGradient::PadSpread);painter.setBrush(linearGrad);//painter.setCompositionMode(QPainter::RasterOp_NotSourceXorDestination);painter.setCompositionMode(QPainter::CompositionMode_Difference);for(int i = 0; i < 36; i++){painter.drawEllipse(QPoint(50,0),50,50);painter.rotate(10);}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何判断服务器是否被攻击
  • 微信小程序如何实现登陆和注册功能?
  • ShardingSphere-JDBC —— 整合 mybatis-plus,调用批量方法执行更新操作扫所有分表问题
  • 【cocos creator】2.4.x实现简单3d功能,点击选中,旋转,材质修改,透明材质
  • c++课后作业
  • Oracle左连接过滤条件注意事项
  • 【Linux杂货铺】3.程序地址空间
  • UART编程
  • 基于复旦微JFMQL100TAI的全国产化FPGA+AI人工智能异构计算平台,兼容XC7Z045-2FFG900I
  • 全面揭秘:ChatGPT-4o带来的下一代AI能力
  • 环境管理开发实战
  • 卸载docker
  • Python input NameError: name ‘xxx‘ is not defined.
  • 智充科技营收增速放缓:经营成本飙升,应收账款大幅增长
  • Halcon机器视觉15种缺陷检测案例_4产品毛剌检测
  • 收藏网友的 源程序下载网
  • [NodeJS] 关于Buffer
  • co模块的前端实现
  • hadoop集群管理系统搭建规划说明
  • java中的hashCode
  • Sass 快速入门教程
  • storm drpc实例
  • 翻译:Hystrix - How To Use
  • 基于游标的分页接口实现
  • 如何解决微信端直接跳WAP端
  • 限制Java线程池运行线程以及等待线程数量的策略
  • #ifdef 的技巧用法
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (C语言)fgets与fputs函数详解
  • (C语言)二分查找 超详细
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (离散数学)逻辑连接词
  • (六)什么是Vite——热更新时vite、webpack做了什么
  • (四) 虚拟摄像头vivi体验
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • 、写入Shellcode到注册表上线
  • ./configure,make,make install的作用(转)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET delegate 委托 、 Event 事件,接口回调
  • .Net IOC框架入门之一 Unity
  • .NET6 命令行启动及发布单个Exe文件
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • /bin/bash^M: bad interpreter: No such file ordirectory
  • @JsonFormat 和 @DateTimeFormat 的区别
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [AI 大模型] Meta LLaMA-2
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)
  • [C++]——继承 深继承