QGradient(渐变填充)

QGradient和QBrush一起使用来指定渐变填充。

Qt支持的填充:

  • 线性渐变(linear gradient),在起点和终点之间插值颜色
  • 辐射渐变(radial gradient),在焦点和围绕它的圆的端点之间插入颜色
  • 锥形渐变(Conical gradient),在中心和焦点圆之间插值颜色

Android paint渐变透明 painter渐变怎么用_Qt

 QLinearGradient(线性渐变)

线性渐变在起点和终点之间插值颜色

构造函数:

Android paint渐变透明 painter渐变怎么用_Android paint渐变透明_02

 常用的函数:

setStart()

设置起点

start()

返回起点

setFinalStop()

设置终点

finalStop()

返回终点

setSpread()

设置扩散方式

setColorAt()

设置颜色

需要注意的是:确定了起始点和结束点之后,会将结束点和起始点平分,起始点位置为0.0,结束点位置为1.0 ,通过比例设置颜色。

setSpread()设置扩散方式

QGradient::Spread

PadSpread

垫展(默认)

ReflectSpread

反射传播

RepeatSpread

重复传播

Android paint渐变透明 painter渐变怎么用_qt_03

 

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);//绘制矩形

}

Android paint渐变透明 painter渐变怎么用_Qt_04

 

 QRadialGradient(辐射渐变)

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

构造函数:

Android paint渐变透明 painter渐变怎么用_线性渐变_05

QRadiaGradient(const QPointF &center, qreal centerRadius,const QPointF &focalPoint, qreal focalRadius

  • center  圆心
  • centerRadius  圆的半径
  • focalPoint   焦点
  • focalRadius   焦点半径
  • 焦点位置为0,圆环位置为1,然后在中间穿插颜色

常用的函数:

setSpread()

设置渐变方式

centerRadius()

返回圆的半径

center()

返回中心坐标

focalRadius()

返回焦点半径

focalPoint()

返回焦点坐标

setxxxx

可以设置以上的坐标和半径

setSpread()设置渐变方式: 

QGradient::Spread

Android paint渐变透明 painter渐变怎么用_Qt_06

 

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);//绘制矩形
}

Android paint渐变透明 painter渐变怎么用_插值_07

 QConicalGradient(锥形渐变)

 圆锥渐变围绕中心点逆时针插值颜色。

构造函数:

 

Android paint渐变透明 painter渐变怎么用_Android paint渐变透明_08

 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);//绘制圆
}

Android paint渐变透明 painter渐变怎么用_Qt_09