(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)
谢谢
739

被折叠的 条评论
为什么被折叠?



