QT编程入门系列文章之二十七——渐变填充

在这里插入图片描述
  前面说了有关反走样的相关知识,下面来说一下渐变。渐变是绘图中很常见的一种功能简单来说就是可以把几种颜色混合在一起,让它们能够自 然地过渡,而不是一下子变成另一种颜色。渐变的算法比较复杂,写得不好的话效率会很低,好在很多绘图系统都内置了渐变的功能,Qt也不例外。渐变一般是用 在填充里面的,所以,渐变的设置就是在QBrush里面。

Qt 提供了三种渐变画刷,分别是线性渐变 (QLinearGradient)、辐射渐变

(QRadialGradient)、角度渐变(QConicalGradient)。如下图所示(图片出 自C++ GUI Programming with Qt4, 2nd Edition):

在这里插入图片描述
下面我们来看一下线性渐变QLinearGradient的用法。

void  PaintedWidget::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);

}

同前面一样,这里也仅仅给出 了paintEvent()函数里面的代码。

首先我们打开了反走样,然后创建一个QLinearGradient对象实例。 QLinearGradient构造函数有四个参数,分别是x1, y1, x2, y2,即渐变的起始点和终止点。在这里,我们从(60, 50)开始渐变,到(200, 200)止。

渐变的颜色是在setColorAt()函数中指定的。下面是这个函数的签名:

void  QGradient::setColorAt ( qreal position, const QColor & color )

它的意思是把position位置的颜色设置成color。其中,position是一个0 - 1区间的数字。也就是说,position是相对于我们建立渐变对象时做的那个起始点和终止点区间的。

比如这个线性渐变,就是说,在从(60, 50)到(200, 200)的线段上,在0.2,也就五分之一处设置成白色,在0.6也就是五分之三处设置成绿色,在1.0也就是终点处设置成黑色。

在创建QBrush时,把这个渐变对象传递进去,就是我们的结果啦:

在这里插入图片描述
  那么,我们怎么让线段也是渐变的呢?要知道,直线是用画笔绘制的啊!这里,如果你仔细查阅了API文档就会发 现,QPen是接受QBrush作为参数的。也就是说,你可以利用一个QBrush创建一个QPen,这样,QBrush所有的填充效果都可以用在画笔上 了!

void PaintedWidget::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.drawLine(50, 50, 200, 200);

}

看看我们的渐变线吧!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习成长分享快乐

您的鼓励是我前进的不竭动力~~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值