QT 之QBrush 与渐变

在平时编程中,QBrush定义了绘图过程中,填充形状的模式或规则。在QPainter,QPen类中,是个很重要的属性。

QBrush 有 以下几种重要属性

1.style() :

定义了填充模式,默认的style为Qt::NoBrush(取决于你怎样创建的格式刷)这种方式告诉画笔不要去填充图形。 可以通过setStyle()来设置填充模式。 下面我们就来看看所有画刷的样式,我们从官方帮助文档里找到了答案,如下图:

QT 之QBrush 与渐变_第1张图片


2.color() :

    定义了用什么颜色去填充区域。可以是Qt预定义的颜色,比如Qt::red 之类的,也可以是我们通过QColor定义的任何颜色。使用setColor(QColor color) 来设置。


3.就是颜色的渐变。什么是渐变呢?从字面意思就可以理解,就是可以把几种颜色混合在一起,让它们能够自然地过渡,而不是一下子变成另一种颜色。渐变的算法比较复杂,写得不好的话效率会很低,好在很多绘图系统都内置了渐变的功能,Qt 也不例外。渐变一般是用在填充里面的,所以,设置渐变是在QBrush里面。

Qt 提供了三种渐变:线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)和角度渐变(QConicalGradient)。我们可以在 Qt API 手册中看到这几种渐变的区别:

线性渐变:
QT 之QBrush 与渐变_第2张图片

辐射渐变:
QT 之QBrush 与渐变_第3张图片

角度渐变:
QT 之QBrush 与渐变_第4张图片

具体细节可以参考文档。下面我们通过一个示例看看如何使用渐变进行填充:

void MainWindow::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing, true);//打开反走样
    QLinearGradient linearGradient(0, 50, 0, 200);//初始化,设置开始和结束点
    linearGradient.setColorAt(0.3, Qt::red);//设置从0-30%的区域为红色
    linearGradient.setColorAt(0.6, Qt::green);//设置30%-60%的区域为绿色
    linearGradient.setColorAt(1.0, Qt::blue);//设置60%-100%的区域为蓝色
    painter.setBrush(QBrush(linearGradient));//
    painter.drawRect(50, 50, 200, 200);//画一个矩形
}

来解释一下上面的渐变代码:

QLinearGradient构造函数有四个参数,分别是X1,Y1,X2,Y2也就是渐变的起点和终点。就相当于一条线段,渐变就是在这条线段的范围内发生的。在这里也就是从(0, 50)点开始渐变, 到(0, 200)点为止。

渐变的颜色是在setColorAt(qreal position, QColor color)函数中指定的。这个函数的作用是把positon位置的颜色设置成color。其中position是一个[0, 1]闭区间的数字,就是说,positon 是相对于我们建立渐变对象时做的那个起点和终点区间的一个比例。以这个线渐变为例,在(0,50)到(0, 200)的线段上,在0.3也就是大概三分之一的地方设置成红色。 在0.6的也就是三分之二的地方设置成绿色,在终点1.0的地方设置成蓝色。结果如下图

QT 之QBrush 与渐变_第5张图片




总结一下:

Qt 绘图系统定义了两个绘制时使用的关键属性:画刷和画笔。前者使用QBrush描述,大多用于填充;后者使用QPen描述,大多用于绘制轮廓线。

QPainter也是一个状态机,这里我们所说的这些属性都是处于这个状态机之中的,因此,我们应该记得是否要将其保存下来或者是重新构建。


你可能感兴趣的:(QT,QT,QBrush,渐变)