画刷QBrush
画刷主要作用于封闭图形里面的填充
可以设置画刷的颜色和样式
颜色
// 获取和设置画刷的颜色
const QColor &color() const
void setColor(const QColor &color)
样式
// 获取和设置画刷的样式
Qt::BrushStyle style() const
void setStyle(Qt::BrushStyle style)
Qt::BrushStyle是一个枚举,有多种取值,挑几个值得说的介绍
- Qt::BrushStyle::SolidPattern(默认就是SolidPattern,实心填充)
- Qt::BrushStyle::CrossPattern(网格填充)
- Qt::BrushStyle::LinearGradientPattern(线性渐变)
获得一个线性渐变的画刷代码如下:
//需要先构造线性渐变对象
//参数1:渐变开始点,参数2:渐变结束点
//此处y坐标都是50.可见是沿着X轴进行横向渐变,纵向渐变就X坐标相同
//可任意指定两个点,沿着这两个点形成的直线进行渐变
QLinearGradient linear_gradient(QPoint(0,50),QPoint(300,50));
linear_gradient.setColorAt(0.0,Qt::green);//最开始为绿色
linear_gradient.setColorAt(0.2,Qt::blue);//20%处变为蓝色
linear_gradient.setColorAt(1.0,Qt::yellow);//最后变为黄色
//通过构造函数得到渐变填充的画刷
QBrush brush(linear_gradient);
brush.setColor(QColor(0,255,0));
brush.setStyle(Qt::BrushStyle::LinearGradientPattern);
painter.setBrush(brush);
- Qt::BrushStyle::RadialGradientPattern(径向渐变)
获得一个径向渐变的画刷代码如下:
//需要先构造径向渐变对象
//参数1:渐变开始的圆心,参数2:渐变的半径,参数3:焦点偏移点(也可不指定)
QRadialGradient radial_gradient(QPoint(150,110),100);
//指定焦点偏移(效果上面图2)
//QRadialGradient radial_gradient(QPoint(150,110),100,QPoint(170,130));
radial_gradient.setColorAt(0.0,Qt::green);
radial_gradient.setColorAt(0.8,Qt::blue);
radial_gradient.setColorAt(1.0,Qt::yellow);
//通过构造函数得到径向渐变填充的画刷
QBrush brush(radial_gradient);
brush.setColor(QColor(0,255,0));
brush.setStyle(Qt::BrushStyle::RadialGradientPattern);
painter.setBrush(brush);
- Qt::BrushStyle::ConicalGradientPattern(锥形渐变)
获得一个锥形渐变的画刷代码如下:
//需要先构造锥形渐变对象
//参数1:圆心,参数2:开始渐变的角度
QConicalGradient conical_gradient(QPoint(150,100),90);
conical_gradient.setColorAt(0.0,Qt::green);
conical_gradient.setColorAt(0.5,Qt::blue);
conical_gradient.setColorAt(1.0,Qt::yellow);
//通过构造函数得到锥形渐变填充的画刷
QBrush brush(conical_gradient);
brush.setColor(QColor(0,255,0));
brush.setStyle(Qt::BrushStyle::ConicalGradientPattern);
painter.setBrush(brush);
- Qt::BrushStyle::TexturePattern(纹理填充)
获得一个纹理填充的画刷代码如下:
//通过构造函数得到纹理填充的画刷,需要一张图片
QBrush brush(QPixmap(":/11.jpeg"));
brush.setColor(QColor(0,255,0));
brush.setStyle(Qt::BrushStyle::TexturePattern);
painter.setBrush(brush);
- 还可以为Qt::BrushStyle::NoBrush,没有任何填充
Qt官方文档举例: