# 2. 框线和填充 ​ QT中使用`QPen`来设置图形边框的颜色和宽度,使用`QBrush`来设置填充的颜色和样式。 ## 框线 ​ QPen,即画笔。QPainter相当于画家,定义了绘画操作;而QPen相当于画笔,定义了画家绘制时图形的边框轮廓。 ​ QPen绘制时的基本属性有:轮廓颜色、轮廓宽度、线条样式、顶端样式。 ### 轮廓颜色 QPen使用`setColor`设置画笔颜色: ```c++ void QPen::setColor(const QColor &color) ``` 其中,QColor支持: 1. Qt名称空间定义的颜色,如`Qt::red`。 2. `QRgb`定义的rgb颜色或`Qrgba64`定义的颜色。 3. Html所支持的颜色名,如“skyblue”。 4. 支持透明度alpha通道。 ### 轮廓宽度 ​ QPen使用`setWidth`或`setWidthF`设置画笔宽度,两个函数的不同在于第二个支持浮点数。 ### 线条样式 ​ 线条样式使用setDashPattern进行设置: ```c++ void QPen::setDashPattern(const QVector &pattern) ``` 内置样式为: ​ 当然,你也可以自定义样式: ```c++ QPen pen; QVector dashes; qreal space = 4; dashes << 1 << space << 3 << space << 9 << space << 27 << space << 9 << space; pen.setDashPattern(dashes); // 来自QTDoc ``` ### 顶端样式 ​ 顶端样式使用`setCapStyle`进行设置。 ```c++ void QPen::setCapStyle(Qt::PenCapStyle style) ``` 内置样式如下: // 以下来自[画刷和画笔](http://www.devbean.net/2012/11/qt-study-road-2-brush-pen/) 他们之间的区别是,`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`进行设置: ```c++ void QBrush::setColor(Qt::GlobalColor color) ``` ### 纹理 ​ 纹理由`setStyle`或`setTexture`或`setTextureImage`进行设置: ```c++ void QBrush::setStyle(Qt::BrushStyle style); void QBrush::setTexture(const QPixmap &pixmap); void QBrush::setTextureImage(const QImage &image); ``` 内置风格如下: ### 渐变 ​ 渐变由`setStyle`或`setTexture`或`setTextureImage`进行设置: ```c++ void QBrush::setStyle(Qt::BrushStyle style); void QBrush::setTexture(const QPixmap &pixmap); void QBrush::setTextureImage(const QImage &image); ``` 内置风格如下: 依次为:线性渐变、径向渐变和锥形渐变。 例: ```c++ 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》 ```