WordPress伪静态公告404/优化搜索引擎的方法
文章目录
- 前言
- 一、径向渐变实现光照效果
- 1.1 焦点在圆内部,简单径向渐变
- 1.2 、焦点在圆外,简单径向渐变
- 1.3 、焦点在圆外,扩展径向渐变
- 二、径向渐变实现球体
- 总结
前言
径向渐变类型:如果构造函数中焦点圆无焦点圆的半径,那就是简单径向,否则就是扩展径向渐变,扩展径向中焦点圆可以是0 。
光照效果:当照射在有光泽的物体上时出现在这个物体上的明亮的光斑。
一、径向渐变实现光照效果
光照效果很重要,可以提供对一个物体形状的强烈视觉感受。
1.1 焦点在圆内部,简单径向渐变
![]() | ![]() |
纯黑色背景 | 焦点在内部中心位置 |
代码如下(示例):
void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);int centerX = width()/2;int centerY = height() / 2;int radial = qMin(centerX,centerY) * 0.8;painter.setRenderHints(QPainter::Antialiasing);// 纯黑色背景painter.setPen(Qt::NoPen);painter.setBrush(Qt::black);painter.drawRect(0,0,width(),height());QRadialGradient g;// 焦点在内部中心位置g = QRadialGradient(centerX,centerY ,radial,centerX,centerY ,radial*0.5);g.setColorAt(0,QColor(0,245,50,255*0));g.setColorAt(0.2,QColor(0,245,50,255*0));g.setColorAt(0.21,QColor(0,245,50,255*0.1));g.setColorAt(0.6,QColor(0,245,50,255*1));g.setColorAt(0.8,QColor(0,245,50,255*0.8));g.setColorAt(0.99,QColor(0,245,50,255*0.99));g.setColorAt(1,QColor(0,245,50,255*0));painter.fillRect(0,0,width(),height(),g);
}
1.2 、焦点在圆外,简单径向渐变
- 图示
![]() | ![]() |
纯黑色背景 | 焦点在圆外的简单径向 |
- 代码如下(示例):
// 焦点在中心圆外部位置,简单径向g = QRadialGradient(centerX,centerY ,radial*0.5,0,0);
1.3 、焦点在圆外,扩展径向渐变
- 图示,效果就是在焦点圆与中心圆之间进行渐变工作
![]() | ![]() |
纯黑色背景 | 焦点在圆外的扩展径向 |
- 代码如下(构造函数多了最后一个参数:焦点圆半径,就变成了扩展径向渐变):
// 焦点在中心圆外部位置,扩展径向g = QRadialGradient(centerX,centerY,radial*0.5, 0,0, 0);
二、径向渐变实现球体
径向渐变类可以提供一个物体形状的强烈 视觉感受。它们最常用于创建球体的图像。照亮的球体仍然是当前 图形设计中的另一个趋势。下图演示了使用高光区如何用于绘制球体。注意对球体底部的径向渐变的实施变换的实现方式,使得圆形渐变实际上变成了一个椭圆形的渐变区域
-
图示
-
代码
#include "Widget.h"
#include <QPainter>
Widget::Widget(QWidget *parent): QWidget(parent)
{resize(180,180);setWindowFlags(Qt::WindowCloseButtonHint);setWindowTitle("RG");
}void Widget::paintEvent(QPaintEvent *)
{QPainter painter(this);painter.setRenderHints(QPainter::Antialiasing);int size = qMin(width(),height())-1;painter.setPen(Qt::NoPen);// 用纯蓝色填充圆painter.setBrush(QColor(0x0153CC)); //99,165,247painter.drawEllipse(0,0,size,size);//在顶部添加阴影QLinearGradient gl = QLinearGradient(0,0,0,height());gl.setColorAt(0,QColor(0,0,0,255*0.4));gl.setColorAt(1,QColor(0,0,0,255*0.0));painter.setBrush(gl);painter.drawEllipse(0,0,size,size);//在底部添加高光gl = QLinearGradient(0,0,0,height());gl.setColorAt(0,QColor(255,255,255,255*0));gl.setColorAt(1,QColor(255,255,255,255*0.4));painter.setBrush(gl);painter.drawEllipse(0,0,size,size);// 创建深色边缘以获得3D效果QRadialGradient gr = QRadialGradient(size/2,size/2,size/2);gr.setColorAt(0,QColor(6,76,160,127));gr.setColorAt(1,QColor(0,0,0,0.8*255));painter.setBrush(gr);painter.drawEllipse(0,0,size,size);//添加椭圆形内的底部高光gr = QRadialGradient(size/2.0,size*1.5,size/2.3,size/2.0,size*1.75+6);gr.setColorAt(0,QColor(64,142,203,255));gr.setColorAt(0.8,QColor(64,142,203,0));painter.setPen(Qt::black);QBrush brush = QBrush(gr);brush.setTransform(QTransform::fromScale(1,0.5));painter.setBrush(brush);painter.drawEllipse(0,0,size,size);//在左上角增加椭圆高光gr = QRadialGradient(size/2.0,size/2,size/1.4,size/8,size/9);gr.setColorAt(0,QColor(255,255,255,255*0.5));gr.setColorAt(0.5,QColor(64,142,203,0));painter.setPen(Qt::black);brush = QBrush(gr);painter.setBrush(brush);painter.drawEllipse(0,0,size,size);
}
总结
径向渐变分为两种:简单径向渐变 和 扩展径向渐变。用是否有焦点圆的半径参数来决定。