天天看點

QT漸變QLinearGradient

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());
}
           
Qt

繼續閱讀