2. 框线和填充
QT中使用QPen来设置图形边框的颜色和宽度,使用QBrush来设置填充的颜色和样式。
框线
QPen,即画笔。QPainter相当于画家,定义了绘画操作;而QPen相当于画笔,定义了画家绘制时图形的边框轮廓。
QPen绘制时的基本属性有:轮廓颜色、轮廓宽度、线条样式、顶端样式。
轮廓颜色
QPen使用setColor设置画笔颜色:
void QPen::setColor(const QColor &color)
其中,QColor支持:
Qt名称空间定义的颜色,如
Qt::red。QRgb定义的rgb颜色或Qrgba64定义的颜色。Html所支持的颜色名,如“skyblue”。
支持透明度alpha通道。
轮廓宽度
QPen使用setWidth或setWidthF设置画笔宽度,两个函数的不同在于第二个支持浮点数。
线条样式
线条样式使用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)
纹理
纹理由setStyle或setTexture或setTextureImage进行设置:
void QBrush::setStyle(Qt::BrushStyle style);
void QBrush::setTexture(const QPixmap &pixmap);
void QBrush::setTextureImage(const QImage &image);
内置风格如下:
渐变
渐变由setStyle或setTexture或setTextureImage进行设置:
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》