今天一直在研究渐变颜色之类的问题,下午正好有机会和大家分享一下.

后面说了有关反走样的相干知识,下面来讲一下渐变。渐变是绘图中很罕见的一种功能,它是利用颜色插值使得两个或更多颜色之间能够平滑过渡,简单来讲就是可以把几种颜色混合在一起,让它们能够自然地过渡,而不是一下子酿成另一种颜色。它们常被用来创立二维图形的三维效果。渐变的算法比较复杂,写得欠好的话效率会很低,好在很多绘图系统都内置了渐变的功能,Qt也不例外。渐变一般是用在填充里面的,所以,渐变的设置就是在QBrush里面。
        Qt支持三种类型的渐变,分别是线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、锥形渐变(QConicalGradient)。

1、线性渐变由两个控制点定义,连接这两点的线上设置一系列的颜色断点。这些断点被钳位到浮点数0和1之间,0对应第一个控制点,1对应第二个控制点,两个指定断点之间的颜色由线性插值得出。如代码(以下给出paintEvent()函数里面的代码):

void MyWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);QLinearGradient linearGradient(60, 50, 200, 200); linearGradient.setColorAt(0.2, Qt::white); linearGradient.setColorAt(0.6, Qt::green); linearGradient.setColorAt(1.0, Qt::black); painter.setBrush(QBrush(linearGradient)); painter.drawEllipse(50, 50, 200, 150);
}

这里0对应第一个控制点(60,50),1对应第二个控制点(200,200),之间用了三个颜色插值,效果如下图:

2、辐射渐变由一个中心点、半径、一个核心,以及颜色断点控制。中心点和半径定义一个圆。颜色从核心向外扩散,核心可所以中心点或者圆内的其他点。代码如下:

void MyWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);QRadialGradient radialGradient(130, 130, 100, 130, 130);radialGradient.setColorAt(0.0, Qt::white);radialGradient.setColorAt(0.6, Qt::black);radialGradient.setColorAt(0.8, Qt::green);painter.setBrush(QBrush(radialGradient));painter.drawEllipse(50, 50, 200, 150);
}
每日一道理
有些冷,有些凉,心中有些无奈,我一个人走在黑夜中,有些颤抖,身体瑟缩着,新也在抖动着,我看不清前方的路,何去何从,感觉迷茫,胸口有些闷,我环视了一下周围,无人的街头显得冷清,感到整个世界都要将我放弃。脚步彷徨之间,泪早已滴下……

这里QRadialGradient radialGradient(130, 130, 100, 130, 130);中前两个参数指定了中心点,第三个参数指定了半径,后两个参数指定了核心,这里中心点和核心是同一个点,所以看起来效果是从中心点向外平均扩散。效果如下:

3、锥形渐变由一个中心点和一个角度定义,颜色从x轴正向偏转一个角度开始,按给定颜色断点旋转扩散。代码如下:

void MyWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);QConicalGradient conicalGradient(150,150, 90);conicalGradient.setColorAt(0.2, Qt::white);conicalGradient.setColorAt(0.6, Qt::green);conicalGradient.setColorAt(0.8, Qt::black);painter.setBrush(QBrush(conicalGradient));painter.drawEllipse(50, 50, 200, 150);
}

这里定义(150,150)为中心点,从x轴正向开始偏转90度,然后按白绿黑旋转扩撒,效果如下:

4、那么我们如何控制我们的线条也是渐变效果呢 ? 通常我们画线是用画笔来完成的,但是QPen是接收QBrush做参数的,也就是说,你可以利用一个QBrush创立一个QPen,这样,QBrush所有的填充效果都可以用在画笔上了!代码如下:

void MyWidget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);QLinearGradient linearGradient(60, 50, 200, 200); linearGradient.setColorAt(0.2, Qt::white); linearGradient.setColorAt(0.6, Qt::green); linearGradient.setColorAt(1.0, Qt::black); painter.setPen(QPen(QBrush(linearGradient),5)); painter.drawEllipse(50, 50, 200, 150);
}

上去看看我们的画线的渐变效果吧!

文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”

转载于:https://www.cnblogs.com/jiangu66/archive/2013/05/12/3074836.html

渐变颜色Qt学习:QPainter之渐变填充相关推荐

  1. ai怎么渐变颜色_AI中怎么调渐变颜色

    AI中怎么调渐变颜色?下面是一篇关于AI中调渐变颜色的教程,希望对新手朋友有所帮助吧! 首先,我们来看看效果图: 步骤如下: 1.打开一个带有渐变背景的素材.现在我们希望在不改变背景色调关系的情况下, ...

  2. html三角形渐变颜色,三角形箭头的css渐变

    小编典典 您可以以一种简单得多的方式来执行此操作,仅使用一个元素和一个旋转的伪元素(任何支持CSS渐变的浏览器也支持CSS变换和伪元素和成角度的线性渐变. 在Windows上使用当前版本的Chrome ...

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

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

  4. Qt Qss 渐变颜色设置

    1.渐变颜色设置有:qlineargradient(线性渐变颜色设置),qradialgradient(辐射渐变),qconicalgradient(圆锥形渐变). QLinearGradient:显 ...

  5. html渐变颜色填充,在画布形状中填充渐变色

    您也可以在画布形状内填充渐变色.渐变只是从一种颜色到另一种颜色的平滑视觉过渡.有两种类型的渐变可用:线性渐变和径向渐变. 创建线性渐变的基本语法可以通过以下方式给出: var grd = contex ...

  6. 说说在 Canvas 中如何填充渐变颜色

    渐变颜色填充方式有两种:线性或径向. 线性渐变填充会创建一个水平 . 垂直或者对角线的填充图案. 径向渐变填充会自中心点创建一个放射状填充图案. 1 线性渐变 1.1 线性水平渐变 (1)基本形状 S ...

  7. 「SwiftUI」Gradient渐变颜色填充效果

    iOS 使用渐变色进行填充 这需要使用到Gradient渐变器来实现颜色的渐变变化 常用的有两种:颜色线性变化,径向发散变化 1.线性变化 效果如图: ps:因颜色有重合部分,所以会生成新的颜色,使用 ...

  8. html用渐变颜色填充块,SVG颜色、渐变和填充(示例代码)

    颜色 RGB和HSL都是CSS3支持的颜色表示方法,一般普遍使用是RGB. PS:HSL浏览器兼容. RGB RGB即是代表红.绿.蓝三个通道的颜色,通过对红(R).绿(G).蓝(B)三个颜色通道的变 ...

  9. html如何把图片填充颜色渐变,css图片怎么设置透明度渐变?

    css可以在设置图片颜色时使用linear-gradient()函数设置渐变,其中渐变颜色使用rgba()设置即可设置图片透明度渐变. linear-gradient() 函数用于创建一个线性渐变的 ...

最新文章

  1. 在线项目管理软件推荐
  2. 【英文文本分类实战】之四——词典提取与词向量提取
  3. 《跟我学java》_《跟我学Java——基础篇02》
  4. IOS开发基础之团购案例17-xib和UITableView两种方式实现
  5. 【Leetcode | 235】 235. 二叉搜索树的最近公共祖先
  6. mysql php ajax_PHP 和 AJAX MySQL 数据库实例
  7. 如何在Eclipse配置PyDev插件
  8. WordPress采集插件-WordPress文章自动采集发布
  9. visio2013画图时两条直线交叉, 如何让它不弯曲
  10. 图像滤镜艺术---LOMO Filter
  11. 在线通过dd命令备份分区
  12. 先帝爷下南阳御驾三请,联东吴灭曹魏鼎足三分~~~
  13. C语言输出单个汉字字符
  14. 孙陶然:创业是和平年代最靓丽的生活方式
  15. Public Private Protect Inheritance and access specifiers
  16. excel打开csv文件乱码解决办法
  17. 【拆解】Apple Watch Series 6 ,电池更大、陶瓷和蓝宝石外壳更薄,更强硬,更耐磨!...
  18. python工程师职业规划书范文_AI工程师职业规划和学习路线完整版
  19. 卡特尔、辛迪加、托拉斯、康采恩有什么区别
  20. 如何选择优质线路的韩国服务器

热门文章

  1. Mr.J--心形跳动demo
  2. 张朋——一个血癌患者,他需要我们大家的救助!(附张朋求助网)
  3. 区间dp——cf1025D二叉搜索树的中序遍历好题!
  4. html to docx
  5. fun(1),fun(2),fun(3)
  6. [转载]GIF、JPEG 和 PNG的区别在哪里?
  7. .NET轻量级任务管理类
  8. [CF353C]Find Maximum(贪心)
  9. STL中 set 和 multiset
  10. 反射机制 Class.getDeclaredMethod