Qt有三种渐变画刷:线性渐变(QLinearGradient)、辐射渐变(QRadialGradient)、角度渐变(QConicalGradient)。
以线性渐变来说,有两种方式设置渐变,一是通过qss,二是代码重写paintEvent处理。
一、qss:
设置QLabel的背景色
"QLabel{background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 red, stop:1 green)}"
对QLabel的color是不起作用的,对QPushButton的color起作用。
x1->x2,表示水平方向的颜色变化;y1->y2,表示垂直方向的颜色变化。如果只有x相等,表示垂直方向渐变,如果只有y相等表示水平方向渐变,否则是对角线方向渐变。
0,0,0,1 从上向下渐变
0,0,1,0 从左向右渐变
二、paintEvent处理:
//label的文字填充
//Label->setFixedSize(160, 80);
void Label::paintEvent(QPaintEvent *e)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);//反锯齿
QLinearGradient linearGradient(0, 0, 0, rect().height());//渐变区域
linearGradient.setColorAt(0, Qt::red);
//(0.5, Qt::blue);
linearGradient.setColorAt(1, Qt::green);
QFont ft = painter.font();
ft.setPixelSize(60);
painter.setFont(ft);
QFontMetrics fm(ft);
QRect rt = fm.boundingRect(rect(), Qt::AlignCenter, "TEST");
QPainterPath path;
path.addText(rt.bottomLeft(), ft, "TEST");
painter.fillPath(path, linearGradient);
//(path, QPen(Qt::darkMagenta, 1));//字体边框
//(linearGradient);//设置画刷,则(rect());绘制出渐变背景
painter.drawRect(rect());
}