(1)本类的继承关系如下 :
(2)本类是支持流运算的 :
(3)本类的构造函数与运算符 operator 函数 :
++关于本类的构造函数,进行以下测试 :
++只修改画刷的构成 :
++以及,看来与 类型 QBitmap 有关 :
++关于渐变填充,随后在渐变篇测试。
(4) 本类型支持相等与不等比较 :
(5) 以及 :
++本刷子的代码完毕。就这些。
(6)本源代码定义于头文件 qbrush . h :
QT_BEGIN_NAMESPACE
/*
The QBrush class defines the fill pattern of shapes drawn by QPainter.
Detailed Description :
画笔具有样式、颜色、渐变和纹理。 (构造;质地;结构;纹理; texture)
A brush has a style, a color, a gradient and a texture.
画笔的`style()`函数使用`Qt::BrushStyle`枚举来定义填充图案。
默认的画笔样式是`Qt::NoBrush`(具体取决于如何构建画笔)。
该样式指示绘图器不填充形状填充的标准样式是`Qt::SolidPattern'。
在创建画笔时可以通过相应的构造函数设置该样式,此外,`setStyle()、函数提供了在创建画笔后更改样式的手段。
画笔的`color()`函数定义了填充图案的颜色。
颜色可以是Qt预定义的色值之一Qt::GlobalColor,或者任何其他自定义的`QColor'。
当前设置的颜色可以通过color()、和`setColor()、函数分别进行检索和更改。
gradient()、函数定义了当前样式为 Qt::LinearGradientPattern、
Qt::RadialGradientPattern 或 Qt::ConicalGradientPattern 时使用的渐变填充(圆锥形的 Conical)。
在创建QBrush 时,通过将 QGradient 作为构造函数的参数来创建渐变笔刷。
Qt 提供了三种不同的渐变:QLinearGradient、QConicalGradient和 QRadialGradient,
它们都继承自QGradient.
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);
texture()、函数定义了在当前样式为 Qt::TexturePattern 时使用的位图。
您可以通过在创建画笔时提供位图或通过使用`setTexture()、方法来创建带有纹理的画笔。
请注意,调用setTexture()将使style()等于Qt::TexturePattern,而无论先前的样式设置如何。
此外,如果样式是渐变样式,调用setcolor()将不会产生任何影响。
同样,如果样式是Qt::TexturePattern样式,除非当前纹理是QBitmap,否则也不会产生任何影响。
isOpaque()函数返回true如果画笔是完全不透明的,否则返回false。
如果满足以下条件,则认为画笔是不透明的:
*颜色的alpha组件是255。
*其纹理()没有alpha通道,也不是QBitmap。
*渐变中的颜色都有一个为255的alpha组件。
要指定线条和轮廓的样式和颜色,请使用Painter's笔,并结合Qt::PenStyle和Qt:GlobalColor.
QPainter painter(this);
painter.setBrush(Qt::cyan);
painter.setPen(Qt::darkCyan);
painter.drawRect(0, 0, 100,100);
painter.setBrush(Qt::NoBrush);
painter.setPen(Qt::darkGreen);
painter.drawRect(40, 40, 100, 100);
请注意,默认情况下,QPainter在绘制形状时会使用当前设置的笔来渲染轮廓。
使用 painter.setPen(Qt::NoPen)可以禁用此行为。
*/
/*
//这个枚举类型定义了Qt支持的画笔样式,即使用Painter绘制的形状的填充式。
enum BrushStyle { // brush style
NoBrush, //No brush pattern.
SolidPattern, //Uniform color.
Dense1Pattern, //Extremely dense brush pattern.
Dense2Pattern, //Very dense brush pattern.
Dense3Pattern, //Somewhat dense brush pattern.
Dense4Pattern, //Half dense brush pattern
Dense5Pattern, //有点稀疏的刷子图案。
Dense6Pattern, //Very sparse稀疏的 brush pattern.
Dense7Pattern, //Extremely sparse brush pattern.
HorPattern, //Horizontal lines
VerPattern, //Vertical lines.
CrossPattern, //Crossing horizontal and vertical lines.
BDiagPattern, //Backward diagonal lines. 向后对角线。
FDiagPattern, //Forward diagonal lines.
DiagCrossPattern, //Crossing diagonal lines.
LinearGradientPattern, //Linear gradient
RadialGradientPattern, //RadialGradient
ConicalGradientPattern, //ConicalGradient
TexturePattern = 24 //自定义图案 Custom pattern
};
*/
struct QBrushData;
class QPixmap;
class QGradient;
class QVariant;
struct QBrushDataPointerDeleter
{
void operator()(QBrushData * d) const noexcept; //括号()运算符函数
};
//QBrush stream functions
Q_GUI_EXPORT QDataStream & operator<<(QDataStream &, const QBrush &);
Q_GUI_EXPORT QDataStream & operator>>(QDataStream &, QBrush &);
Q_GUI_EXPORT QDebug operator<<(QDebug , const QBrush &);
struct QBrushData
{
QAtomicInt ref;
Qt::BrushStyle style;
QColor color;
QTransform transform;
};
class Q_GUI_EXPORT QBrush
{
private:
friend class QRasterPaintEngine;
friend class QRasterPaintEnginePrivate;
friend struct QSpanData;
friend class QPainter;
friend bool Q_GUI_EXPORT qHasPixmapTexture(const QBrush & brush);
void detach(Qt::BrushStyle newStyle);
void init(const QColor & color, Qt::BrushStyle bs);
//对画刷的初始化只关注这俩方面:颜色与样式
DataPtr d; //本类的数据成员
public:
QBrush(); //构建一个默认的黑色画刷,样式为Qt::NoBrush(即此画笔不会填充形状)。
QBrush(Qt::BrushStyle bs); //使用给定的样式 bs构建一个黑色画刷。
//Constructs a brush with the given color and style. 使用给定的颜色和样式构造一个画刷。
QBrush(const QColor & color, Qt::BrushStyle bs = Qt::SolidPattern);
QBrush(Qt::GlobalColor color, Qt::BrushStyle bs = Qt::SolidPattern);
//创建一个黑色的刷子,并将纹理设置为给定的像素图 pixmap。样式设置为Qt::TexturePattern。
QBrush(const QPixmap & pixmap);
QBrush(const QImage & image );
QBrush(const QColor & color, const QPixmap & pixmap); //模式 pattern
QBrush(Qt::GlobalColor color, const QPixmap & pixmap);
//使用给定的颜色 color和存储在pixmap中的自定义图案构造一个画刷。
//样式设置为Qt::TexturePattern。颜色仅对QBitmap有效。
QBrush(const QGradient & gradient); //根据给定的渐变 gradient构造一个画刷。
//笔刷样式被设定为相应的渐变样式(可以是 Qt::LinearGradientPattern、
// Qt:.RadialGradientPattern或Qt::ConicalGradientPattern),
QBrush(const QBrush & brush); // copy构造函数
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QBrush)
~QBrush();
QBrush & operator=(const QBrush & brush); // copy赋值运算符函数
operator QVariant() const; //类型转换运算符函数
bool operator==(const QBrush & b) const;
inline
bool operator!=(const QBrush & b) const
{ return !(operator==(b)); }
inline void swap(QBrush & other) noexcept { qSwap(d, other.d); }
using DataPtr = std::unique_ptr<QBrushData, QBrushDataPointerDeleter>; //独占式智能指针
inline
bool isDetached() const { return d->ref.loadRelaxed() == 1; }
bool isOpaque() const; //如果画笔完全不透明,则返回true;否则返回false。
//如果满足以下条件,则认为画笔是不透明的:
// 颜色的alpha组件为255。
// 其纹理(texture)没有 alpha通道且不是QBitmap。
// 渐变中的颜色()都具有alpha组件为255。
// 它是一个扩展的径向渐变。
inline DataPtr & data_ptr () { return d; }
const QGradient * gradient() const; //返回描述此画刷的渐变。
inline const
QColor & color() const { return d->color; }
void setColor(const QColor & color); //画刷颜色
inline
void setColor(Qt::GlobalColor color)
{ setColor(QColor(color)); }
//将画笔颜色设置为给定的颜色 color。
//请注意,如果样式是渐变样式,调用setcolor()并不会产生任何影响。
//同样,如果样式是 Qt:TexturePattern 样式,除非当前纹理是 QBitmap,否则也不会产生影响。
inline
Qt::BrushStyle style() const { return d->style; }
void setStyle(Qt::BrushStyle); //画刷样式
//返回自定义刷子图案,如果没有设置自定义刷子图案,则返回空位图。
QPixmap texture () const;
void setTexture (const QPixmap & pixmap);
//将画笔的像素图设置为给定的像素图 pixmap。样式被设置为 Qt::TexturePattern纹理模式。
//当前的画笔颜色仅对单色位图有效,即对于QPixmap::depth()==1(QBitmap)
//如果纹理设置为QPixmap,它将被转换为QImage。
QImage textureImage() const;
void setTextureImage(const QImage & image );
//请注意,当前的笔刷颜色对单色图像不会有任何影响,这与使用QBitmap调用setTexture()不同。
//如果您想改变单色图像笔刷的颜色,可以先将图像转换为QBitmap,使用QBitmap::fromImage()函数,
// 然后将生成的QBitmap用作纹理,或者修改图像颜色表中的条目。
inline //返回当前的刷子变换矩阵。
QTransform transform() const { return d->transform; }
void setTransform(const QTransform & matrix);
//将矩阵 matrix设置为当前笔刷上的显式变换矩阵。
//笔刷变换矩阵会与QPainter变换矩阵合并,以产生最终结果。
}; //完结 class QBrush
Q_DECLARE_SHARED(QBrush)
QT_END_NAMESPACE
(7)关于渐变的三个类,也在本头文件,后文介绍。
(8)
谢谢