00. 目录

文章目录

  • 00. 目录
  • 01. 概述
  • 02. 开发环境
  • 03. 线性渐变
  • 04. 辐射渐变
  • 05. 锥形渐变
  • 06. 附录

01. 概述

在画刷中可以使用渐变填充。QGradient类就是用来和QBrush一起指定渐变填充的。Qt现在支持三种类型的渐变填充:

  • 线性渐变(linear gradient)在开始点和结束点之间插入颜色;
  • 辐射渐变(radial gradient)在焦点和环绕它的圆环间插入颜色;
  • 锥形渐变(Conical)在圆心周围插入颜色。

这三种渐变分别由QGradient的三个子类来表示,QLinearGradient表示线性渐变,QRadialGradient表示辐射渐变,QConicalGradient表示锥形渐变。

02. 开发环境

Windows系统:Windows10

Qt版本:Qt5.15或者Qt6

03. 线性渐变

对于线性渐变QLinearGradient::QLinearGradient ( const QPointF & start, constQPointF & finalStop )需要指定开始点start和结束点finalStop,然后将开始点和结束点之间的区域进行等分,开始点的位置为0.0,结束点的位置为1.0,而它们之间的位置按照距离比例进行设定,然后使用QGradient::setColorAt( qreal position, const QColor & color )函数在指定的位置position插入指定的颜色color,当然,这里的position的值要在0到1之间。

这里还可以使用setSpread()函数来设置填充的扩散方式,即指明在指定区域以外的区域怎样进行填充。扩散方式由QGradient::Spread枚举类型定义,它一共有三个值,分别是QGradient::PadSpread,使用最接近的颜色进行填充,这是默认值,如果我们不使用setSpread()指定扩散方式,那么就会默认使用这种方式;QGradient::RepeatSpread,在渐变区域以外的区域重复渐变;QGradient::ReflectSpread,在渐变区域以外将反射渐变。在线性渐变中这三种扩散方式的效果下图所示。要使用渐变填充,可以直接在setBrush()中使用,这时画刷风格会自动设置为相对应的渐变填充。

程序示例

void Widget::paintEvent(QPaintEvent *)
{//线性渐变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);//使用渐变作为画刷QPainter painter(this);painter.setBrush(linearGradient);painter.drawRect(100, 100, 90, 40);}

执行结果

04. 辐射渐变

对于辐射渐变QRadialGradient::QRadialGradient( const QPointF & center, qreal radius, const QPointF & focalPoint )需要指定圆心center和半径radius,这样就确定了一个圆,然后再指定一个焦点focalPoint。焦点的位置为0,圆环的位置为1,然后在焦点和圆环间插入颜色。辐射渐变也可以使用setSpread()函数设置在渐变区域以外的区域的扩散方式,三种扩散方式的效果如下图所示。

程序示例

void Widget::paintEvent(QPaintEvent *)
{//方式二:辐射渐变QRadialGradient radialGradient(QPointF(100, 190), 50, QPointF(275, 200));radialGradient.setColorAt(0, QColor(255, 255, 100, 150));radialGradient.setColorAt(1, QColor(0, 0, 0, 50));QPainter painter(this);painter.setBrush(radialGradient);painter.drawEllipse(QPointF(100, 200), 50, 50);
}

执行结果

05. 锥形渐变

对于锥形渐变QConicalGradient::QConicalGradient ( const QPointF & center,qreal angle )需要指定中心点center和一个角度angle(其值在0到360之间),然后沿逆时针从给定的角度开始环绕中心点插入颜色。这里给定的角度沿逆时针方向开始的位置为0,旋转一圈后为1。setSpread()函数对于锥形渐变没有效果。

程序示例

void Widget::paintEvent(QPaintEvent *)
{//方式三:锥形渐变QConicalGradient conicalGradient(QPointF(250, 190), 60);conicalGradient.setColorAt(0.2, Qt::cyan);conicalGradient.setColorAt(0.9, Qt::black);QPainter painter(this);painter.setBrush(conicalGradient);painter.drawEllipse(QPointF(250, 200), 200, 200);}

执行结果

06. 附录

源码下载:【Qt】2D绘图之渐变填充.rar

【Qt】2D绘图之渐变填充相关推荐

  1. Qt 2D绘图功能简单总结

    文章目录 Qt 2D绘图功能简单总结 Qt 2D绘图功能简单总结 Qt 的绘图功能非常强大,它可以绘制一切想要的图形,从最简单的一条直线到其他任何复杂的图形,还可以用来绘制文本和图片. Qt的绘图系统 ...

  2. Qt 2D绘图之二:抗锯齿渲染和坐标系统

    一.抗锯齿渲染 1.1 逻辑绘图 图形基元的大小(宽度和高度)始终与其数学模型相对应,下图示意了忽略其渲染时使用的画笔的宽度的样子. 1.2 物理绘图(默认情况) 在默认的情况下,绘制会产生锯齿,并且 ...

  3. Qt 2D绘图(5):绘制图像基础

    Qt 2D绘图(5):绘制图像基础 本文为原创文章,转载请注明出处,或注明转载自"黄邦勇帅(原名:黄勇) 本文出自本人原创著作<Qt5.10 GUI完全参考手册>网盘地址: ht ...

  4. 28、Qt 之图形(渐变填充)

    简述 QGradient 可以和 QBrush 组合使用,来指定渐变填充. Qt 目前支持三种类型的渐变填充: QLinearGradient:显示从起点到终点的渐变 QRadialGradient: ...

  5. Qt中国象棋一—— Qt 2D 绘图入门

    最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下.查了一些网上的资料,在此总结一下:我比较喜欢的方式是用到什么学什么,或者自己想做一个东西, ...

  6. Qt——功能:圆形渐变填充(样式表)

    测试环境:win10.Qt Creator 4.11.1.5.14.2版本SDK 填充效果: radialGradient.h #ifndef RADIALGRADIENT_H #define RAD ...

  7. QT 2d绘图优化(一)

    最近在用QT做一款白板软件,在开发过程中,发现了有如下几个问题 void drawLine(QPointF endpt) {path.quadTo(path.currentPosition(),(pa ...

  8. [Qt教程] 第12篇 2D绘图(二)渐变填充

    [Qt教程] 第12篇 2D绘图(二)渐变填充 楼主  发表于 2013-4-23 17:59:31 | 查看: 689| 回复: 1 渐变填充 版权声明 该文章原创于Qter开源社区,作者yafei ...

  9. 【Qt】2D绘图之填充规则

    00. 目录 文章目录 00. 目录 01. 概述 02. 开发环境 03. 程序示例 04. 预留 05. 附录 01. 概述 绘制多边形的时候就提到了填充规则Qt::FillRule,填充路径时也 ...

最新文章

  1. python界面设计实例-Python GUI项目实战(二)主窗体的界面设计与实现
  2. tuple 方法总结整理
  3. 201571030335/201571030320《小学四则运算练习软件软件需求说明》结对项目报告
  4. 朴素贝叶斯原理及实现
  5. Android之ndk编译出现“undefined reference to method“解决办法
  6. 从RDS中获取binlog
  7. cad计算机制图论文,机械制图论文范文
  8. 地图上制作线路的动画_R制作动画地图
  9. 电脑硬盘坏道怎么检测,又如何修复图文教程
  10. SREng 使用指南(五)扩展的解说
  11. linux tar命令将压缩包解压到指定位置,用tar命令把目标压缩包解压到指定位置
  12. 8项引导技能在Scrum中的应用
  13. 数据库原理 | 第1章 概述
  14. Python工具分析风险数据
  15. maven install报The forked VM terminated without saying properly goodbye. VM crash or System.exit call
  16. 数学建模方法-灰色预测
  17. NXP JN5169使用EEPROM/片上FLASH/随机数/内部NVM
  18. 数据库开发转行大数据开发工程师怎么样?
  19. Trackback, Pingback , Backlink与博客
  20. ubuntu中使用vi编辑无法使用上下左右移动键的处理方式

热门文章

  1. .net开发人员应该知道(一)
  2. ASP.NET中的数据绑定:哪个更快? (转)
  3. c语言 bmp白底黑字,用c语言把bmp格式的彩色图片转换成黑白的
  4. osgi框架和spring区别_最全153道Spring全家桶面试题,你都知道哪些?(含答案解析)...
  5. 通过mtd读写flash_敏矽微电子Cortex-M0学习笔记11-FLASH存储器
  6. bpsk信道编码matlab,信道编码-研究日记_3 10/14/2016
  7. 寻找数组中的第二大数
  8. Groovy 1.5.7 出现java.lang.LinkageError问题
  9. nltk download失败
  10. innerHTML,innerText