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 ¢er, 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 ¢er, qreal angle)需要指定中心点center和一个角度angle(其值在0~360之间),然后沿逆时针从给定的角度开始环绕中心点插入颜色,这里给定的角度沿逆时针方向开始的位置为0,旋转一圈后为1,setSpread()函数对于锥形渐变没有效果。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?