Qt有三種漸變畫刷:線性漸變(QLinearGradient)、輻射漸變(QRadialGradient)、角度漸變(QConicalGradient)。
以線性漸變來說,有兩種方式設定漸變,一是通過qss,二是代碼重寫paintEvent處理。
一、qss:
設定QLabel的背景色
對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);
//linearGradient.setColorAt(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);
//painter.strokePath(path, QPen(Qt::darkMagenta, 1));//字型邊框
//painter.setBrush(linearGradient);//設定畫刷,則painter.drawRect(rect());繪制出漸變背景
painter.drawRect(rect());
}