Qt填充渐变颜色:
QBrush支持三种渐变方式:
通过QLinearGradient, QConicalGradient, QRadialGradient构造渐变QBrush
源码:
void PainterWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.setPen(Qt::black);
painter.drawRect(rect().adjusted(0, 0, -5, -5));
//线性渐变
QRect tmpRect = QRect(20, 20, 100, 100);
QLinearGradient linearGradient(tmpRect.topLeft(), tmpRect.bottomRight());
linearGradient.setColorAt(0.0, Qt::red);
linearGradient.setColorAt(1.0, Qt::white);
QBrush brush(linearGradient);
painter.setBrush(brush);
painter.drawRect(tmpRect);
painter.setPen(Qt::NoPen);
tmpRect = QRect(140, 20, 100, 100);
linearGradient = QLinearGradient(tmpRect.topLeft(), tmpRect.topRight());
linearGradient.setColorAt(0.0, Qt::red);
linearGradient.setColorAt(1.0, Qt::white);
brush = QBrush(linearGradient);
painter.setBrush(brush);
painter.drawRect(tmpRect);
tmpRect = QRect(260, 20, 100, 100);
linearGradient = QLinearGradient(tmpRect.topLeft(), tmpRect.bottomLeft());
linearGradient.setColorAt(0.0, Qt::red);
linearGradient.setColorAt(1.0, Qt::white);
brush = QBrush(linearGradient);
painter.setBrush(brush);
painter.drawRect(tmpRect);
//径向渐变
tmpRect = QRect(20, 140, 100, 100);
QRadialGradient radiaGradient = QRadialGradient(tmpRect.center(), tmpRect.width() / 2);
radiaGradient.setColorAt(0.0, Qt::red);
radiaGradient.setColorAt(1.0, Qt::white);
brush = QBrush(radiaGradient);
painter.setBrush(brush);
painter.drawRect(tmpRect);
//锥形渐变
tmpRect = QRect(20, 260, 100, 100);
QConicalGradient conicalGradient = QConicalGradient(tmpRect.center(), 0);
conicalGradient.setColorAt(0.0, Qt::red);
conicalGradient.setColorAt(1.0, Qt::white);
brush = QBrush(conicalGradient);
painter.setBrush(brush);
painter.drawRect(tmpRect);
painter.setBrush(brush);
painter.drawRect(tmpRect);
}
实现效果: