QGradient(渐变填充)
QGradient和QBrush一起使用来指定渐变填充。
Qt支持的填充:
- 线性渐变(linear gradient),在起点和终点之间插值颜色
- 辐射渐变(radial gradient),在焦点和围绕它的圆的端点之间插入颜色
- 锥形渐变(Conical gradient),在中心和焦点圆之间插值颜色
QLinearGradient(线性渐变)
线性渐变在起点和终点之间插值颜色
构造函数:
常用的函数:
setStart() | 设置起点 |
start() | 返回起点 |
setFinalStop() | 设置终点 |
finalStop() | 返回终点 |
setSpread() | 设置扩散方式 |
setColorAt() | 设置颜色 |
需要注意的是:确定了起始点和结束点之后,会将结束点和起始点平分,起始点位置为0.0,结束点位置为1.0 ,通过比例设置颜色。
setSpread()设置扩散方式
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);//绘制矩形
}
QRadialGradient(辐射渐变)
简单的径向渐变在焦点和围绕它的圆的端点之间插入颜色。扩展的径向渐变在焦点圆和中心圆之间插值颜色。由两个圆定义的圆锥体外部的点将是透明的。对于简单的径向渐变,焦点被调整为位于中心圆内,而焦点可以在扩展的径向渐变中具有任何位置。
构造函数:
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);//绘制矩形
}
QConicalGradient(锥形渐变)
圆锥渐变围绕中心点逆时针插值颜色。
构造函数:
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);//绘制圆
}