QT6 源,十章绘图(7)画刷 QBrush 的渐变填充类:线性QLinearGradient、辐射QRadialGradient、锥形QConicalGradient

(1) 线性 QLinearGradient

在这里插入图片描述

++尝试给出对象自身局部坐标系的线性渐变

在这里插入图片描述

++引入反射

在这里插入图片描述

++ 再举例,假如线性渐变的起点不在角落,而在绘制矩形的中间,那将如何填充呢

在这里插入图片描述

++再举例,如果线性渐变的坐标定义,在绘图区的外部呢

在这里插入图片描述

++本类的源码版本

/*
The QLinearGradient class is used in combination with QBrush to specify a
    linear gradient brush.

Detailed Description :
线性渐变在起始点和结束点之间插值颜色。在这些点之外,渐变会根据当前设置的扩展方法被填充、反射或重复:

渐变中的颜色是通过 QGradientStop 类型的停止点来定义的,即一个位置和一个颜色。
使用QGradient::setColorAt()或QGradient::setStops()函数来定义停止点。
渐变区域的填充方式是由渐变的完整停止点集来描述的。如果未指定任何停止点,将使用从黑色到白色的渐变。

除了从QGradient类中继承的函数外,
QLinearGradient类还提供了finalStop()函数,用于返回梯度的最终停止点,
以及start()函数,用于返回梯度的起点。

*/

class Q_GUI_EXPORT QLinearGradient : public QGradient
{
public:
    QLinearGradient();
    
    //构建一个线性渐变,其中包含插值区域在(xStart, yStart)和(xFinalStop, yFinalStop)之间。
    //注意:预期的参数值以像素为单位。
    QLinearGradient(qreal xStart, qreal yStart, qreal xFinalStop, qreal yFinalStop);

    QLinearGradient(const QPointF & start, const QPointF & finalStop);
    //构建一个线性渐变,其中包含给定的起始点和结束点之间的插值区域。
    
    ~QLinearGradient();

    QPointF    start    () const;  //返回此线性渐变在逻辑坐标中的起点。
    void    setStart    (const QPointF & start); //将此线性渐变的起点设置为逻辑坐标系中的起始点。
    inline
    void    setStart    (qreal x, qreal y) { setStart    (QPointF(x, y)); }

    QPointF    finalStop() const;  //返回此线性渐变在逻辑坐标中的最终停止点。
    void    setFinalStop(const QPointF & stop); //将此线性渐变的逻辑坐标中的最终停止点设置为 stop。
    inline
    void    setFinalStop(qreal x, qreal y) { setFinalStop(QPointF(x, y)); }
    
}; //完结 class QLinearGradient : public QGradient

(2)接着学习辐射渐变,先是构造函数

在这里插入图片描述

++测试一下

在这里插入图片描述

++

在这里插入图片描述

++

在这里插入图片描述

++

在这里插入图片描述

++

在这里插入图片描述

(3)辐射渐变的源代码

/*
The QRadialGradient class is used in combination with QBrush to specify a
    radial gradient brush.

Detailed Description :
Qt 支持简单和扩展的径向渐变。

简单的径向渐变在焦点点与环绕它的圆上的端点之间插值颜色。
扩展径向渐变则在焦点圆与中心圆之间插值颜色。
由这两个圆定义的圆锥体之外的点将是透明的。
对于简单的径向渐变,焦点点被调整至位于中心圆内,而在扩展径向渐变中,焦点点可以位于任何位置。
在端点之外,渐变根据当前设置的扩散方法进行填充、反射或重复.

渐变中的颜色是通过 QGradientStop 类型的停止点来定义的,即一个位置和一个颜色。
使用QGradient::setColorAt()或QGradient::setStops()函数来定义停止点。
渐变区域的填充方式是由渐变的完整停止点集来描述的。如果未指定任何停止点,将使用从黑色到白色的渐变.

除了从QGradient类中继承的函数外,
QRadialGradient类还提供了center()、focalPoint()和radius()函数,分别返回梯度的中心、焦点和半径。


*/

class Q_GUI_EXPORT QRadialGradient : public QGradient
{
public:
    
    QRadialGradient(); //构建一个简单的径向渐变,中心和焦点位于(0,0),半径为1。

    //构建一个带有给定中心 center、半径 radius 和焦点 focalPoint的简单径向渐变。
    //注:如果给定的焦点位于由中心点和半径所定义的圆之外,
    //  它将被重新调整,以位于圆内一个点上,该点与从中心到焦点的直线相交。
    QRadialGradient(const QPointF & center, qreal radius, const QPointF & focalPoint);
    QRadialGradient(qreal cx, qreal cy,     qreal radius, qreal fx, qreal fy);
    //构建一个简单的径向渐变,具有给定的中心(cx,cy)、半径 radius和焦点(fx,fy)。

    //构建一个简单的径向渐变,具有给定的中心 center、半径 radius, 焦点位于圆心。
    QRadialGradient(const QPointF & center, qreal radius);
    QRadialGradient(qreal cx, qreal cy,     qreal radius);
    //构建一个简单的径向渐变,中心位于(xc,yc),指定半径 radius。焦点位于圆的中心。

    //构建一个带有给定中心、中心半径、焦点点和焦点半径的扩展径向渐变。
    QRadialGradient(const QPointF & center    , qreal centerRadius,
                    const QPointF & focalPoint, qreal  focalRadius);
    QRadialGradient(qreal cx, qreal cy, qreal centerRadius,
                    qreal fx, qreal fy, qreal  focalRadius);
    //构建一个扩展的径向渐变,其参数包括给定的中心点(cx,cy),中心半径 centerRadius,
    //  焦点点fx,fy),以及焦点半径 focalRadius。

    ~QRadialGradient();

    QPointF          center() const;       //返回此径向渐变在逻辑坐标中的中心。
    void          setCenter(const QPointF & center); //将此径向渐变的中心设置为逻辑坐标系中的中心。
    inline void   setCenter(qreal x, qreal y) { setCenter(QPointF(x, y)); }

    QPointF          focalPoint() const;   //返回此径向渐变在逻辑坐标中的焦点。
    //将此径向渐变在逻辑坐标中的焦点设置为focalPoint。
    void          setFocalPoint(const QPointF & focalPoint);
    inline void   setFocalPoint(qreal x, qreal y) { setFocalPoint(QPointF(x, y)); }
    
    qreal                  radius() const; //返回此径向渐变在逻辑坐标中的半径。
    void                setRadius(qreal radius);

    qreal            centerRadius() const; //将此径向渐变在逻辑坐标中的中心圆半径设置为radius
    void          setCenterRadius(qreal radius);

    qreal             focalRadius() const; //返回此径向渐变在逻辑坐标中的焦距半径。
    void           setFocalRadius(qreal radius);
    //将此径向渐变在逻辑坐标中的焦点圆半径设置为radius

}; //完结 class QRadialGradient : public QGradient

(4)锥形渐变

在这里插入图片描述

++测试一下

在这里插入图片描述

++剩余俩成员函数

在这里插入图片描述

++再举例测试

在这里插入图片描述

(5)本锥形渐变的源代码

class Q_GUI_EXPORT QConicalGradient : public QGradient
{
public:
    
    QConicalGradient(); //构建一个中心位于(0,0)的圆锥体,从角度0开始插值。
    
    //构建一个以给定中心 center为起点的锥形渐变,从指定的角度 startAngle开始插值。
    //角度必须是0到360之间的度数。
    QConicalGradient(const QPointF & center, qreal startAngle);
    QConicalGradient(qreal cx, qreal cy    , qreal startAngle);
    //根据给定的中心点(cx,cy)构建一个锥形渐变,从指定的角度 startAngle开始插值。
    
    ~QConicalGradient();

    QPointF        center() const; //返回逻辑坐标中锥形渐变的中心。
    void        setCenter(const QPointF & center);
    inline void setCenter(qreal x, qreal y) { setCenter(QPointF(x, y)); }

    qreal          angle() const; //返回锥形渐变在逻辑坐标中的起始角度。
    void        setAngle(qreal angle);
    
}; //完结 class QConicalGradient : public QGradient

(6)

谢谢

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangzhangkeji

谢谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值