(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 styleNoBrush, //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 patternDense5Pattern, //有點稀疏的刷子圖案。Dense6Pattern, //Very sparse稀疏的 brush pattern.Dense7Pattern, //Extremely sparse brush pattern.HorPattern, //Horizontal linesVerPattern, //Vertical lines.CrossPattern, //Crossing horizontal and vertical lines.BDiagPattern, //Backward diagonal lines. 向后對角線。FDiagPattern, //Forward diagonal lines.DiagCrossPattern, //Crossing diagonal lines.LinearGradientPattern, //Linear gradientRadialGradientPattern, //RadialGradientConicalGradientPattern, //ConicalGradientTexturePattern = 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); //模式 patternQBrush(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;inlinebool 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>; //獨占式智能指針inlinebool 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 constQColor & color() const { return d->color; }void setColor(const QColor & color); //畫刷顏色inlinevoid setColor(Qt::GlobalColor color){ setColor(QColor(color)); }//將畫筆顏色設置為給定的顏色 color。//請注意,如果樣式是漸變樣式,調用setcolor()并不會產生任何影響。//同樣,如果樣式是 Qt:TexturePattern 樣式,除非當前紋理是 QBitmap,否則也不會產生影響。inlineQt::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)
謝謝