Qt之渐变填充

Qt现在支持3种类型的渐变填充:

(1).线性渐变:在开始点和结束点之间插入颜色

(2).辐射渐变:在焦点和环绕它的圆环间插入颜色

(3).锥形渐变:在圆心周围插入颜色

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

一、线性渐变

复制代码
QPainter painter(this);

/* 线性渐变 */
QLinearGradient linear_gradient(QPointF(40, 190), QPointF(70, 190));
linear_gradient.setColorAt(0, Qt::yellow);
linear_gradient.setColorAt(0.5, Qt::red);
linear_gradient.setColorAt(1, Qt::green);
linear_gradient.setSpread(QGradient::RepeatSpread);
painter.setBrush(linear_gradient);
painter.drawRect(10, 170, 90, 40);
复制代码

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

这里可以使用setSpread()函数来设置填充的扩散方式,扩散方式由QGradient::Spread枚举类型定义,它一共有三个值,分别是QGradient::PadSpread,QGradient::RepeatSpread,QGradient::ReflectSpread。

二、辐射渐变

/* 辐射渐变 */
QRadialGradient radial_gradient(QPointF(200, 190), 50, QPointF(275, 200));
radial_gradient.setColorAt(0, QColor(255, 255, 100, 150));
radial_gradient.setColorAt(1, QColor(0, 0, 0, 50));
painter.setPen(Qt::NoPen);
painter.setBrush(radial_gradient);
painter.drawEllipse(QPointF(200, 190), 50, 50);

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

三、锥形渐变

复制代码
/* 锥形渐变 */
QConicalGradient conical_gradient(QPointF(350, 190), 60);
conical_gradient.setColorAt(0.2, Qt::cyan);
conical_gradient.setColorAt(0.9, Qt::black);
painter.setBrush(conical_gradient);
painter.drawEllipse(QPointF(350, 190), 50, 50);

/* 画笔使用线性渐变来绘制直线和文字 */
painter.setPen(QPen(linear_gradient, 2));
painter.drawLine(0, 280, 100, 280);
painter.drawText(150, 280, "Qt");
复制代码

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

posted @   TechNomad  阅读(313)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示