QGradient和QBrush一起使用来指定渐变填充。
Qt支持的填充:
- 线性渐变(linear gradient),在起点和终点之间插值颜色
- 辐射渐变(radial gradient),在焦点和围绕它的圆的端点之间插入颜色
- 锥形渐变(Conical gradient),在中心和焦点圆之间插值颜色

线性渐变在起点和终点之间插值颜色
常用的函数:| setStart() | 设置起点 |
| start() | 返回起点 |
| setFinalStop() | 设置终点 |
| finalStop() | 返回终点 |
| setSpread() | 设置扩散方式 |
| setColorAt() | 设置颜色 |
需要注意的是:确定了起始点和结束点之后,会将结束点和起始点平分,起始点位置为0.0,结束点位置为1.0 ,通过比例设置颜色。
QGradient::Spread
| PadSpread | 垫展(默认) |
| ReflectSpread | 反射传播 |
| RepeatSpread | 重复传播 |

- void Widget::paintEvent(QPaintEvent *event)//绘画事件
- {
- QPainter painter(this);
- QPen pen;
- QVector<qreal> sing;
- qreal space=4;//空格数
- sing<<1<<space<<3<<space<<9<<space<<27<<space<<9<<space;//数量必须为双数
- pen.setDashPattern(sing);//设置笔的样式
- pen.setWidth(2);//设置笔的宽度
- painter.setPen(pen);//修改画家的笔
-
- QLinearGradient lineg(100,100,200,200);//创建一个线性渐变
- //在指定位置插入颜色,范围0-1
- lineg.setColorAt(0,Qt::red);
- lineg.setColorAt(0.5,Qt::cyan);
- lineg.setColorAt(1,Qt::green);
- lineg.setSpread(QGradient::RepeatSpread);//设置扩散方式
- painter.setBrush(lineg);//设置画刷
- painter.drawRect(200,200,100,100);//绘制矩形
-
- }

简单的径向渐变在焦点和围绕它的圆的端点之间插入颜色。扩展的径向渐变在焦点圆和中心圆之间插值颜色。由两个圆定义的圆锥体外部的点将是透明的。对于简单的径向渐变,焦点被调整为位于中心圆内,而焦点可以在扩展的径向渐变中具有任何位置。
构造函数:

QRadiaGradient(const QPointF ¢er, qreal centerRadius,const QPointF &focalPoint, qreal focalRadius)
- center 圆心
- centerRadius 圆的半径
- focalPoint 焦点
- focalRadius 焦点半径
- 焦点位置为0,圆环位置为1,然后在中间穿插颜色
常用的函数:
| setSpread() | 设置渐变方式 |
| centerRadius() | 返回圆的半径 |
| center() | 返回中心坐标 |
| focalRadius() | 返回焦点半径 |
| focalPoint() | 返回焦点坐标 |
| setxxxx | 可以设置以上的坐标和半径 |
setSpread()设置渐变方式:
QGradient::Spread

- void Widget::paintEvent(QPaintEvent *event)//绘画事件
- {
- QPainter painter(this);
- QPen pen;
- QVector<qreal> sing;
- qreal space=4;//空格数
- sing<<1<<space<<3<<space<<9<<space<<27<<space<<9<<space;//数量必须为双数
- pen.setDashPattern(sing);//设置笔的样式
- pen.setWidth(2);//设置笔的宽度
- painter.setPen(pen);//修改画家的笔
-
- QRadialGradient radial(QPoint(100,100),20,QPoint(150,150),20);
- radial.setColorAt(0,Qt::red);
- radial.setColorAt(0.5,Qt::cyan);
- radial.setColorAt(1,Qt::green);
- radial.setSpread(QGradient::RepeatSpread);
- painter.setBrush(radial);
-
- painter.drawRect(200,200,100,100);//绘制矩形
- }

圆锥渐变围绕中心点逆时针插值颜色。
构造函数:

QCoicalGradient(const QPointF &cneter,qreal angle)
- cneter 中心点
- angle 角度(0-360)
- 沿逆时针方向开始的位置为0,旋转一圈后为1
常用函数:
| setColorAt() | 设置颜色 |
| setCenter() | 设置中心点 |
| setAngle() | 设置起始位置 |
- void Widget::paintEvent(QPaintEvent *event)//绘画事件
- {
- QPainter painter(this);
- QPen pen;
- QVector<qreal> sing;
- qreal space=4;//空格数
- sing<<1<<space<<3<<space<<9<<space<<27<<space<<9<<space;//数量必须为双数
- pen.setDashPattern(sing);//设置笔的样式
- pen.setWidth(2);//设置笔的宽度
- painter.setPen(pen);//修改画家的笔
-
- QConicalGradient conical(QPoint(200,200),60);
- conical.setColorAt(0.5,Qt::cyan);
- conical.setColorAt(0.9,Qt::black);
-
- painter.setBrush(conical);
- painter.drawEllipse(200,200,100,100);//绘制圆
- }
