zl程序教程

您现在的位置是:首页 >  工具

当前栏目

Qt之图形(渐变填充)

Qt 图形 填充 渐变
2023-09-27 14:19:43 时间

简述

QGradient可以和QBrush组合使用,来指定渐变填充。

Qt目前支持三种类型的渐变填充:

  • QLinearGradient:显示从起点到终点的渐变。

  • QRadialGradient:以圆心为中心显示渐变。

  • QConicalGradient:围绕一个中心点显示渐变。

一个渐变类型可以使用type()函数来检索,类型中的每一个都是QGradient的子类。

渐变类型

QLinearGradient QRadialGradient QConicalGradient
这里写图片描述 这里写图片描述 这里写图片描述

使用QGradientStop类来描述渐变中过渡点的位置和颜色。例如:一个位置和一个颜色。使用setColorAt()函数来定义一个过渡点。或者,使用setStops()函数来一次定义多个过渡点。需要注意的是,后者的功能将替换当前设置的过渡点。

这是渐变的一套完整的过渡点(通过stops() 来访问)描述渐变区域如何被填充。如果没有指定任何过渡点,那么将会从0点-黑色渐变为1点-白色。

QLinearGradient

QLinearGradient显示从起点到终点的渐变。

效果

QGradient::PadSpread QGradient::RepeatSpread QGradient::ReflectSpread
这里写图片描述 这里写图片描述 这里写图片描述

源码

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    // 设置渐变色
    QLinearGradient linear(QPointF(80, 80), QPointF(150, 150));
    linear.setColorAt(0, Qt::black);
    linear.setColorAt(1, Qt::white);

    // 设置显示模式
    linear.setSpread(QGradient::PadSpread);

    // 设置画笔颜色、宽度
    painter.setPen(QPen(QColor(0, 160, 230), 2));

    // 设置画刷填充
    painter.setBrush(linear);

    // 绘制椭圆
    painter.drawRect(QRect(40, 40, 180, 180));
}

QLinearGradient 类构造函数的第一个参数指定起点,第二个参数指定终点,然后显示渐变。成员函数setColorAt()设置起点和终点之间要显示的颜色,成员函数setSpread()可以设置起点和终点区域之外的显示模式。

QRadialGradient

QRadialGradient类以圆心为中心显示渐变。(cx, cy)是中点,半径(radius)是以中点为圆心的圆的半径,(fx, fy)是渐变的起点。

效果

QGradient::PadSpread QGradient::RepeatSpread QGradient::ReflectSpread
这里写图片描述 这里写图片描述 这里写图片描述

源码

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    // 设置渐变色
    QRadialGradient radial(110, 110, 50, 130, 130);
    radial.setColorAt(0, Qt::black);
    radial.setColorAt(1, Qt::white);

    // 设置显示模式
    radial.setSpread(QGradient::ReflectSpread );

    // 设置画笔颜色、宽度
    painter.setPen(QPen(QColor(0, 160, 230), 2));

    // 设置画刷填充
    painter.setBrush(radial);

    // 绘制椭圆
    painter.drawRect(QRect(40, 40, 180, 180));
}

QRadialGradient类构造函数的第一个参数和第二个参数是(cx, cy)坐标,第三个参数是半径,第四个和第五个参数是(fx, fy)坐标。

QConicalGradient

QConicalGradient类在(cx, cy)坐标上以角度(angle)为中心显示渐变。

效果

这里写图片描述

源码

void MainWindow::paintEvent(QPaintEvent *event)
{
    Q_UNUSED(event);

    QPainter painter(this);

    // 反走样
    painter.setRenderHint(QPainter::Antialiasing, true);

    // 设置渐变色
    QConicalGradient conical(110, 110, 45);
    conical.setColorAt(0, Qt::black);
    conical.setColorAt(1, Qt::white);

    // 设置画笔颜色、宽度
    painter.setPen(QPen(QColor(0, 160, 230), 2));

    // 设置画刷填充
    painter.setBrush(conical);

    // 绘制椭圆
    painter.drawRect(QRect(40, 40, 180, 180));
}