Qt的渐变样式QRadialGradient, 分为简单辐射渐变和扩展辐射渐变。辐射渐变与线性渐变相同的地方,在于两者都有两个点,作为渐变的起点和终点,不同点是线性渐变在起点-终点的梯度上是线性的,而辐射渐变则有弧线的效果。
渐变样式的作用,在于给画刷QBrush类提供一种填充样式。
先看辐射渐变类的构造函数中的第一个:
QRadialGradient::QRadialGradient(qreal cx, qreal cy, qreal radius)
---Constructs a simple radial gradient with the center at (cx, cy) and the specified radius. The focal point lies at the center of the circle.
【翻译:构造一个简单的辐射渐变,中心位于(cx,cy),半径指定为radius, 焦点位于圆心处。 】
从焦点到环之间的位置,按比例设为0到1,用setColorAt(qreal position, QColor color)设置渐变色的相对位置时,就要用到这个比例值。
void Widget::paintEvent(QPaintEvent *event)
{
const int r =350;
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
QRadialGradient radialGradient(0,0,r);
radialGradient.setColorAt(0.0, Qt::red);
radialGradient.setColorAt(60.0/360.0, Qt::yellow);
radialGradient.setColorAt(120.0/360.0, Qt::green);
radialGradient.setColorAt(180.0/360.0, Qt::cyan);
radialGradient.setColorAt(240.0/360.0, Qt::blue);
radialGradient.setColorAt(300.0/360.0, Qt::magenta);
radialGradient.setColorAt(1.0, Qt::red);
painter.translate(r+50, r+50);
QBrush brush(radialGradient);
painter.setPen(Qt::NoPen);
painter.setBrush(brush);
painter.drawEllipse(QPoint(0, 0), r, r);
}