线性渐变 QLinearGradient
弧度渐变 QConicalGradient
辐射渐变 QRadialGradient
QPainter painter(this);
//线性渐变
QLinearGradient linearGradient(0,0,150,150);
linearGradient.setColorAt(0.2,Qt::white);
linearGradient.setColorAt(0.6,Qt::blue);
linearGradient.setColorAt(1.0,Qt::yellow);
painter.setBrush(QBrush(linearGradient));
painter.drawEllipse(0,0,200,150);
//保存当前的painter 放到堆中 save()函数必须有对应的restore()函数
//restore()函数 恢复painter的状态(从堆中取出来)
painter.save();
painter.translate(200,0); //以原坐标的(200,0)为新的坐标系坐标原点(0,0)
const int r = 100;
painter.setRenderHint(QPainter::Antialiasing,true);
//弧度渐变
//弧度渐变由圆心(xc,yc)和一个角度a定义。颜色从圆心开始像表的秒针一样扩散。
//QConicalGradient(qreal cx, qreal cy, qreal angle) 圆心在坐标原点(0,0)角度从60度开始
QConicalGradient conicalGradient(0,0,60);
conicalGradient.setColorAt(0.0,Qt::red);
// conicalGradient.setColorAt(60.0/360.0,Qt::yellow);
// conicalGradient.setColorAt(120.0/360.0,Qt::green);
// conicalGradient.setColorAt(180.0/360.0,Qt::cyan);
// conicalGradient.setColorAt(240.0/360.0,Qt::blue);
// conicalGradient.setColorAt(300.0/360.0,Qt::magenta);
conicalGradient.setColorAt(1.0,Qt::yellow);
//translate(r,r) 以原坐标的(r,r)为新的坐标系坐标原点(0,0)cx,cy 即相对于窗口(300,100)
painter.translate(r,r);
//QBrush brush(brush Style);
QBrush brush(conicalGradient);
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
painter.drawEllipse(QPoint(0,0),r,r);
painter.save();
//辐射渐变
//圆心(0,0)cx,cy 角度0 radius 焦点(30,30)fx,fy开始向外扩散
painter.translate(0,200);
QRadialGradient radialGradient(0,0,100,50,50);
radialGradient.setColorAt(0,Qt::green);
radialGradient.setColorAt(0.8,Qt::red);
painter.translate(r,r);
painter.setBrush(QBrush(radialGradient));
painter.drawEllipse(QPoint(0,0),r,r);
painter.save();
//辐射渐变
//QRadialGradient radialGradient(310,110,100,330,130);
创建了一个QRadialGradient对象实例,参数分别为中心坐标,半径长度和焦点坐标,如果需要对称那么中心坐标和焦点坐标要一致
//radialGradient.setColorAt(0,Qt::green);
radialGradient.setColorAt(0.2,Qt::white);
//radialGradient.setColorAt(0.4,Qt::blue);
radialGradient.setColorAt(0.6,Qt::red);
//radialGradient.setColorAt(1.0,Qt::yellow);
//painter.setBrush(QBrush(radialGradient));
//painter.drawEllipse(210,10,200,200);//在相应的坐标画出来
painter.restore();