2. 框线和填充

​ QT中使用QPen来设置图形边框的颜色和宽度,使用QBrush来设置填充的颜色和样式。

框线

​ QPen,即画笔。QPainter相当于画家,定义了绘画操作;而QPen相当于画笔,定义了画家绘制时图形的边框轮廓。

​ QPen绘制时的基本属性有:轮廓颜色、轮廓宽度、线条样式、顶端样式。

轮廓颜色

QPen使用setColor设置画笔颜色:

void QPen::setColor(const QColor &color)

其中,QColor支持:

  1. Qt名称空间定义的颜色,如Qt::red

  2. QRgb定义的rgb颜色或Qrgba64定义的颜色。

  3. Html所支持的颜色名,如“skyblue”。

  4. 支持透明度alpha通道。

轮廓宽度

​ QPen使用setWidthsetWidthF设置画笔宽度,两个函数的不同在于第二个支持浮点数。

线条样式

​ 线条样式使用setDashPattern进行设置:

void QPen::setDashPattern(const QVector<qreal> &pattern)

内置样式为:

​ 当然,你也可以自定义样式:

QPen pen;
QVector<qreal> dashes;
qreal space = 4;
dashes << 1 << space << 3 << space << 9 << space
             << 27 << space << 9 << space;
pen.setDashPattern(dashes);
// 来自QTDoc

顶端样式

​ 顶端样式使用setCapStyle进行设置。

void QPen::setCapStyle(Qt::PenCapStyle style)

内置样式如下:

// 以下来自画刷和画笔

他们之间的区别是,Qt::SquareCap是一种包含了最后一个点的方形端点,使用半个线宽覆盖;Qt::FlatCap不包含最后一个点;Qt::RoundCap是包含最后一个点的圆形端点。具体可以参考下面的示例(出自《C++ GUI Programming with Qt 4, 2nd Edition》):

连接样式定义了两条线连接时的样式,例如:

同样,可以参考下面图示来理解这几种连接样式的细节(出自《C++ GUI Programming with Qt 4, 2nd Edition》):

填充

QBrush,即画刷。QPen定义了轮廓样式,而QBrush则定义了填充样式。

​ QBrush绘图时的基本属性有:填充颜色、纹理、渐变。

填充颜色渐

​ 填充颜色由QBrush的setColor进行设置:

void QBrush::setColor(Qt::GlobalColor color)

纹理

​ 纹理由setStylesetTexturesetTextureImage进行设置:

void QBrush::setStyle(Qt::BrushStyle style);
void QBrush::setTexture(const QPixmap &pixmap);
void QBrush::setTextureImage(const QImage &image);

内置风格如下:

渐变

​ 渐变由setStylesetTexturesetTextureImage进行设置:

void QBrush::setStyle(Qt::BrushStyle style);
void QBrush::setTexture(const QPixmap &pixmap);
void QBrush::setTextureImage(const QImage &image);

内置风格如下:

依次为:线性渐变、径向渐变和锥形渐变。

例:

QRadialGradient gradient(50, 50, 50, 50, 50);
gradient.setColorAt(0, QColor::fromRgbF(0, 1, 0, 1));
gradient.setColorAt(1, QColor::fromRgbF(0, 0, 0, 0));

QBrush brush(gradient);
// 来自豆子的《Qt学习之路2》