QT 中提供强大的绘图系统,主要基于QPrinter 、QPaintDevice及QPaintEngine这3个类。
QPrinter用于执行绘图操作
QPaintDevice用于提供绘图设备
QPaintEngine提供一些接口
1、基本绘制和填充
绘图系统中由QPainter完成具体的绘制操作,其中提供大量高度优化的函数来完成GUI编程所需要的大部分绘制工作。QQPrinter 可绘制一切想要的图形。
QQPrinter一般在一个部件重绘事件的处理函数paintEvent()中进行绘制,首先要创建QQPrinter对象,然后进行图形的绘制,最后销毁QQPrinter对象。
1.1基本图形的绘制和填充
1)绘制图形
先创建QPrinter对象,使用QQPrinter:(QPaintDevice *device)构造函数,并指定this为绘图设备,表明Widge部件上进行绘制。

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawLine(QPoint(0, 0), QPoint(100, 100));
}
常用的图形绘制函数:
drawArc():绘制圆弧;
drawChord():绘制弦;
drawConvexPolygon():绘制凸多边形;
drawEllipse():绘制椭圆;
drawLine():绘制线条;
drawPie():绘制扇形;
drawPoint():绘制点;
drawPolygon():绘制多边形;
drawPolyline():绘制折线;
drawRect():绘制矩形;
drawRounderRect():绘制圆角矩形;
2)使用画笔
//创建画笔
    QPen pen(Qt::green, 5, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin);
    //使用画笔
    painter.setPen(pen);
    QRectF rectangle(70.0, 40.0, 80.0, 60.0);
    int startAngle = 30 * 16;
int spanAngle = 120 * 16;
QPen类为QPrinter提供了画笔来绘制线条和形状的轮廓。构造函数为:
Qpen::QPen(const QBrush&brush,qreal width,Qt::PenStyle style=Qt::SoildLine,Qt::PenCapStyle cap=Qt::SquareCap,Qt::PenJoinStyle join=Qt::BevelJoin);几个参数依次为画刷、线宽、画笔风格、画笔端点风格和画笔连接风格。
也可使用setBrush、setWidth、setStyle、setCapStyle、setJoinStyle等函数进行设置。
1)画刷风格

2)画笔风格
 
 3)连接点风格
 
 4)顶端风格

3)使用画刷
// 创建画刷
    QBrush brush(QColor(0, 0, 255), Qt::Dense4Pattern);
    // 使用画刷
    painter.setBrush(brush);
    // 绘制椭圆
    painter.drawEllipse(220, 20, 50, 50);
1.2渐变填充
QGradient 类就是用来和QBrush一起指定渐变填充的。
1)线性渐变
// 线性渐变
    QLinearGradient linearGradient(QPointF(40, 190), QPointF(70, 190));
    // 插入颜色
    linearGradient.setColorAt(0, Qt::yellow);
    linearGradient.setColorAt(0.5, Qt::red);
    linearGradient.setColorAt(1, Qt::green);
    // 指定渐变区域以外的区域的扩散方式
    linearGradient.setSpread(QGradient::RepeatSpread);
    // 使用渐变作为画刷
    painter.setBrush(linearGradient);
painter.drawRect(10, 170, 90, 40);
QLinearGradient:: QLinearGradient(const QPointF &start,const QPointF&finalStop)
指定开始点和结束点;
QGradient::setColorAt(qreal position,const QColor&color)函数在指定的位置position插入指定的颜色。position的值要在0和1之间。
setSpread函数设置填充的扩散的,指明在指定区域以外的区域怎样进行填充。
3个值:
PadSpread 使用最接近的颜色进行填充;RepeatSpread在渐变区域以外的区域重复渐变;ReflectSpread在渐变区域以外将反射渐变。
2)辐射渐变
// 辐射渐变
    QRadialGradient radialGradient(QPointF(200, 190), 50, QPointF(275, 200));
    radialGradient.setColorAt(0, QColor(255, 255, 100, 150));
    radialGradient.setColorAt(1, QColor(0, 0, 0, 50));
    painter.setBrush(radialGradient);
painter.drawEllipse(QPointF(200, 190), 50, 50);
指定圆心、半径及焦点
指定颜色
2)锥形渐变
// 锥形渐变
    QConicalGradient conicalGradient(QPointF(350, 190), 60);
    conicalGradient.setColorAt(0.2, Qt::cyan);
    conicalGradient.setColorAt(0.9, Qt::black);
    painter.setBrush(conicalGradient);
    painter.drawEllipse(QPointF(350, 190), 50, 50);

指定中心点和角度
指定颜色

QT读书笔记—绘图基础相关推荐

  1. 《统计自然语言处理》读书笔记 一.基础知识及概念介绍

    最近准备学习自然语言处理相关的知识,主要参考<统计自然语言处理·宗成庆>和<Natural Language Processing with Python>,推荐大家阅读.第一 ...

  2. 《数据密集型应用系统设计》读书笔记——数据系统基础

    因为个人兴趣,想学学分布式方面的知识,然后找到了这本<数据密集型应用系统设计>,确实非常的不错,无论对于以前的工程还是现在的科研都有启迪和感悟,所以就写份读书笔记记录一下,里面提到的知识非 ...

  3. Java编程思想 第四版 读书笔记巩固基础,完善知识框架。

    Java编程思想读书笔记 此笔记仅仅是作者的阅读此书时,发现自己错误认识和不牢固的知识,用来完善作者的知识框架,其列出重点不具有参考性,代码也是为了省工作量,简写代码,能看懂即可,语法并不规范 第一章 ...

  4. 读书笔记——计算机基础之操作系统

    目录 第一章 计算机系统概述 1.1 操作系统的基本概念 1.1.1 操作系统的概念 1.1.2 操作系统的特征 1.1.3 操作系统的目标和功能 1.2 操作系统的发展与分类 1.3 操作系统的运行 ...

  5. python编程从入门到精通读书笔记(基础知识)

    第一部分:基础知识 学习python想要做的软件  1.开机答题软件,(电脑一开机的输入密码,改为答题,初步设定为选择题,答对了才可以进入.)  2.   第二章 2.1第一个程序:  print(& ...

  6. [读书笔记]java基础与案例详解 主编徐明华

    Java SE(标准版),SUN平台体系中最基础最底层的版本,它是各种应用平台的基础. Java SE包含了桌面应用API和Java EE企业级与Java ME嵌入式. Java是一种计算机编程语言: ...

  7. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  8. 《质量全面管控》读书笔记——自动化测试基础

    一.自动化基础 "工欲善其事,必先利其器".学习自动化测试之前需要熟悉至少一门开发语言.自动化测试是把手工执行测试的过程转换为机器执行测试的过程,用机器语言来模拟自然人的操作.自动 ...

  9. 【QT学习笔记】#基础篇#(4)设置程序图标和标题

    一.设置图标 以下两种方式设置后,应用程序本身图标.任务栏图标.窗口左上角图标 会使用设置的同一个图标. 方式一: 在 .pro 文件添加 RC_ICONS = 图标名.ico 示例: QT += c ...

最新文章

  1. 重温目标检测--SSD
  2. 中间件应用程序错误 修复方案_Qtum Neutron:新一代区块链虚拟机中间件会给Qtum带来哪些新功能?...
  3. python实现二分法查找_python3 二分法查找
  4. python手机版做小游戏代码大全-Python大牛手把手教你做一个小游戏,萌新福利!...
  5. [转] PHP在不同页面之间传值的三种常见方式
  6. 28--仅仅反转字母
  7. 默认适应窗口_自适应网格分析带孔平板的应力集中问题
  8. 学会这两个技巧!让你的Mac文件共享超简单
  9. 走近分形与混沌(part5)--洛伦茨与吸引子
  10. (新)最新抖音无水印解析原理再分析过程,柳暗花明又一村
  11. MT6739充电IC集成步骤
  12. Android5.0框架层短信接收过程分析
  13. 银河系的神秘信号:也许我们正见证真实的科幻故事
  14. 【无代码体验】使用鲸智搭开发《招聘管理系统》
  15. cad超级排孔_家具cad排孔图 爆破排孔图
  16. 使用 Python 脚本下载 IPA!
  17. 高等数学笔记(上下)
  18. 计算成绩的及格率和优秀率
  19. 杂乱无章原因简要分析
  20. Tomcat 集群搭建入门

热门文章

  1. python申请超大矩阵_在python中处理大型密集矩阵
  2. 19-05-数据库mysql增删改查
  3. Android工程师应该具备的四大开发习惯
  4. 当前已提供的各国NTP服务器列表
  5. 如何破解Word“取消文档保护”密码
  6. 数据库-MySQL-基础(2)-DDL操作
  7. vue 生成二维码工具
  8. 耳机不分主从是什么意思_“小雪不分股,大雪不出土”指什么意思?立冬过后还能种小麦吗?...
  9. c语言dfs算法初步讲解,[转载]算法初步
  10. Spring,SpringBoot,Springcloud都是干嘛的?