在图形设计当中,渐变效果一般指的是颜色的平滑过渡。QLinearGradient是Qt框架中提供的渐变类,可以用于填充封闭多边形、矩形和椭圆形,以及线性填充窗口区域或QPainterPath。使用QLinearGradient可以轻松地创建漂亮的渐变效果。
一、QLinearGradient的基本用法
使用QLinearGradient可以创建线性渐变,主要是根据坐标系中的起点和终点确定渐变的方向,从而创建渐变。对于线性渐变,可以控制渐变的起点和终点,通过这两个点控制渐变的方向和长度。
// 可以通过以下代码创建一个从左上角到右下角的线性渐变 QLinearGradient linearGradient(QPoint(0, 0), QPoint(400, 400));
如果想要水平方向的渐变效果,可以通过设置终点的x坐标大于起点的x坐标来实现。
// 可以通过以下代码创建一个水平方向的线性渐变 QLinearGradient linearGradient(QPoint(0, 200), QPoint(400, 200));
如果想要垂直方向的渐变效果,可以通过设置终点的y坐标大于起点的y坐标来实现。
// 可以通过以下代码创建一个垂直方向的线性渐变 QLinearGradient linearGradient(QPoint(200, 0), QPoint(200, 400));
在创建完QLinearGradient对象之后,可以调用它的setColorAt()函数为渐变设置颜色。
// 可以通过以下代码为渐变设置颜色 linearGradient.setColorAt(0.0, QColor(Qt::white)); linearGradient.setColorAt(1.0, QColor(Qt::black));
二、QLinearGradient的高级用法
QLinearGradient还提供了一些高级用法,主要是通过设置渐变的模式和扩散方式来扩展渐变的效果。
QGradient::Spread定义了渐变的扩散方式,它有以下几种扩散方式:
- QGradient::Pad: 默认值,表示在渐变区域边缘处不做处理,超出的部分保持原有颜色
- QGradient::Repeat: 对于超出渐变区域的部分,重复渐变中的颜色。
- QGradient::Reflect: 对于超出渐变区域的部分,镜像反射渐变中的颜色。
// 可以通过以下代码设置渐变的扩散方式 linearGradient.setSpread(QGradient::Repeat);
QGradient::CoordMode定义了坐标系中渐变的模式,它有以下几种模式:
- QGradient::LogicalMode: 默认值,表示以QPainter绘制的坐标系为参考
- QGradient::StretchToDeviceMode: 表示以设备坐标系为参考
- QGradient::ObjectBoundingMode: 表示以对象边界框为参考
// 可以通过以下代码设置渐变的模式 linearGradient.setCoordinateMode(QGradient::ObjectBoundingMode);
同时,我们还可以将多个渐变对象连接起来,从而实现更加丰富的效果。
// 可以通过以下代码连接多个渐变对象 QLinearGradient linearGradient1(QPoint(0, 0), QPoint(400, 400)); linearGradient1.setColorAt(0.0, QColor(Qt::white)); linearGradient1.setColorAt(1.0, QColor(Qt::black)); QLinearGradient linearGradient2(QPoint(0, 400), QPoint(400, 0)); linearGradient2.setColorAt(0.0, QColor(Qt::black)); linearGradient2.setColorAt(1.0, QColor(Qt::white)); QLinearGradient linearGradient3(QPoint(200, 0), QPoint(200, 400)); linearGradient3.setColorAt(0.0, QColor(255, 0, 0)); linearGradient3.setColorAt(0.5, QColor(0, 255, 0)); linearGradient3.setColorAt(1.0, QColor(0, 0, 255)); QLinearGradient linearGradient4(QPoint(0, 200), QPoint(400, 200)); linearGradient4.setColorAt(0.0, QColor(255, 0, 0)); linearGradient4.setColorAt(0.5, QColor(0, 255, 0)); linearGradient4.setColorAt(1.0, QColor(0, 0, 255)); QLinearGradient linearGradient5(QPoint(0, 0), QPoint(400, 0)); linearGradient5.setColorAt(0.0, QColor(Qt::white)); linearGradient5.setColorAt(1.0, QColor(Qt::black)); QLinearGradient linearGradient6(QPoint(0, 400), QPoint(400, 400)); linearGradient6.setColorAt(0.0, QColor(Qt::black)); linearGradient6.setColorAt(1.0, QColor(Qt::white));
三、使用QLinearGradient填充图形
通过QLinearGradient和QPainter可以填充各种图形,从而实现渐变效果。
// 可以通过以下代码为矩形填充线性渐变 QPainter painter(this); painter.setBrush(QBrush(linearGradient)); painter.drawRect(QRect(0, 0, 400, 400));
也可以通过QPainterPath和setBrush函数为一个多边形、封闭曲线来设置填充颜色和渐变效果。
// 可以通过以下代码为一个多边形设置渐变效果 QPainterPath path; path.moveTo(200, 0); path.lineTo(400, 400); path.lineTo(0, 400); path.lineTo(200, 0); painter.setBrush(QBrush(linearGradient)); painter.drawPath(path);
四、总结
使用QLinearGradient可以轻松创建漂亮的渐变效果,主要需要掌握以下知识:
- 创建渐变对象需要指定起点和终点坐标
- 可以通过setColorAt()函数为渐变对象设置颜色
- QGradient::Spread定义了渐变的扩散方式,QGradient::CoordMode定义了坐标系中渐变的模式
- 可以连接多个渐变对象来实现更加丰富的效果
- 可以通过QPainter和QPainterPath将渐变填充到图形或路径中