QT6 源,十章繪圖(2)畫刷 QBrush:刷子只涉及填充顏色,線型,填充圖片,以及變換矩陣這幾個屬性,附源代碼帶注釋。

(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)

謝謝

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917773.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917773.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917773.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

安科瑞智慧能源管理系統在啤酒廠5MW分布式光伏防逆流控制實踐

項目信息 光伏裝機1MW&#xff0c;3個并網點&#xff0c;低壓接 入配電系統。 要求自發自用、余電不上網。解決方案 通過防逆流保護裝置&#xff0c;做到剛性控制&#xff0c; 實現并網柜快速切斷&#xff1b;通過防逆流管理系統&#xff0c;做到柔性調節&#xff0c; 實現光伏…

VUE-第二季-02

3.Vue組件化 3.1 什么是組件 (1) 傳統方式開發的應用 一個網頁通常包括三部分&#xff1a;結構&#xff08;HTML&#xff09;、樣式&#xff08;CSS&#xff09;、交互&#xff08;JavaScript&#xff09; 傳統應用存在的問題&#xff1a; ① 關系縱橫交織&#xff0c;復雜…

【OpenGL】LearnOpenGL學習筆記02 - 繪制三角形、矩形

上接: https://blog.csdn.net/weixin_44506615/article/details/149861824 完整代碼&#xff1a;https://gitee.com/Duo1J/learn-open-gl 一、渲染管線 在開始之前&#xff0c;我們先簡單了解一下圖形渲染管線 在渲染3D物體時&#xff0c;我們常用到的一種幾何結構為網格模型…

Mysql的事務是什么?

簡單來說&#xff0c;MySQL 實現事務的核心就像是給你的數據庫操作加了一套“保險和存檔”機制。它確保了你的操作要么全部成功&#xff0c;要么全部失敗&#xff0c;并且在面對多人同時操作、系統突然崩潰等情況時&#xff0c;數據依然可靠、準確。 為什么需要事務呢&#xff…

測試開發:Python+Django實現接口測試工具

【測試開發天花板】DjangoVuePyTest打造企業級自動化平臺&#xff5c;能寫進簡歷的硬核項目最近被幾個公司實習生整自閉了&#xff0c;沒有基礎&#xff0c;想學自動化又不知道怎么去學&#xff0c;沒有方向沒有頭緒&#xff0c;說白了其實就是學習過程中沒有成就感&#xff0c…

TFS-2022《A Novel Data-Driven Approach to Autonomous Fuzzy Clustering》

核心思想 這篇論文的核心思想是提出一種全新的、數據驅動的自主模糊聚類&#xff08;Autonomous Fuzzy Clustering, AFC&#xff09;算法。其核心創新在于&#xff0c;它巧妙地結合了模糊聚類的靈活性和基于中位數&#xff08;medoids&#xff09;聚類的可解釋性&#xff0c;并…

ELK是什么

ELK 是一個廣受歡迎的開源技術棧&#xff0c;用于實時采集、處理、存儲、搜索、分析和可視化海量的日志數據&#xff08;log&#xff09;和機器生成的數據&#xff08;machine data&#xff09;&#xff0c;尤其是在 IT 系統監控、應用故障排查、安全分析和業務智能等領域應用廣…

[硬件電路-123]:模擬電路 - 信號處理電路 - 常見的高速運放芯片、典型電路、電路實施注意事項

一、高速運放常見芯片型號及特性高速運放&#xff08;高速運算放大器&#xff09;通常指帶寬&#xff08;GBW&#xff09;超過10MHz、壓擺率&#xff08;SR&#xff09;高于10V/μs的器件&#xff0c;適用于視頻處理、通信系統、高速數據采集等場景。以下是典型芯片及其特性&am…

關于解決WinRiver項目動態XmlElement的序列化與反序列化的問題

關于解決WinRiver項目動態XmlElement的序列化與反序列化的問題 一、WinRiver項目流量匯總XML內容 1.1、索引可變,索引下 XmlElement 元素內容固定 1.2、如何將對象 BottomTrack 的動態內容序列化為 XML ? 1.3、如何將 XML 動態內容反序列化為對象 BottomTrack ? 二、XML 動態…

【力扣 Hot100】 刷題日記

D3 128.最長連續序列 錯解 class Solution {public int longestConsecutive(int[] nums) {Arrays.sort(nums);int maxCnt 0;int cnt 0;for (int i 0; i < nums.length - 1; i) {if(nums[i] ! nums[i 1] - 1){//如果不連續&#xff0c;取cnt與maxCnt較大值&#xff0c…

飛算JavaAI編程插件:以AI之力賦能Java開發,讓編碼效率再升級

你是否希望自己敲代碼的時候總有一位大佬在你背后幫你保駕護航。想象一下&#xff0c;當你對著Java編輯器敲代碼時&#xff0c;身后站了位“隱形大神”——你剛敲出for&#xff0c;它就預判到你要遍歷集合&#xff0c;自動補全帶泛型的循環邏輯&#xff1b;你手滑把equals寫成&…

機器學習通關秘籍|Day 03:決策樹、隨機森林與線性回歸

目錄 一、決策樹 1、概念 2、基于信息增益的決策樹的建立 &#xff08;1&#xff09;信息熵 &#xff08;2&#xff09;信息增益 &#xff08;3&#xff09;信息增益決策樹建立步驟 3、基于基尼指數的決策樹的建立 4、API 二、隨機森林 1、算法原理 2、API 三、線性…

C++進階—C++的類型轉換

第一章&#xff1a;C語言中的類型轉換在C語言中&#xff0c;如果賦值運算符左右兩側類型不同&#xff0c;或者形參與實參類型不匹配&#xff0c;或者返回值類型與接收返回值類型不一致時&#xff0c;就需要發生類型轉化&#xff0c;C語言中總共有兩種形式的類型轉換&#xff1a…

基于Flask的微博話題多標簽情感分析系統設計

基于Flask的微博話題情感分析系統設計與實現 一、項目概述 本項目是一個輕量化的微博話題情感分析系統&#xff0c;通過Flask框架整合情感分析模型&#xff0c;實現對微博話題及評論的情感標簽識別與結果展示。系統面向普通用戶和研究者&#xff0c;提供簡單易用的操作界面&…

TDengine 中 TDgpt 的模型評估工具

模型評估工具 TDgpt 在企業版中提供預測分析模型和異常檢測模型有效性評估工具 analytics_compare&#xff0c;該工具能夠使用 TDengine 中的時序數據作為 回測依據&#xff0c;評估不同預測模型或訓練模型的有效性。該工具在開源版本中不可用使用評估工具&#xff0c;需要在其…

【DL學習筆記】DataLoader類功能和參數說明

文章目錄一、Dataset 與 DataLoader 功能介紹抽象類Dataset的作用DataLoader 作用兩者關系二、torch.utils.data.DataLoader代碼示例常用參數圖示num_workers設置多少合適數據加載子進程如何并行的pin_memorysampler兩種sampler順序采樣 SequentialSampler隨機采樣 RandomSampl…

JVM中年輕代、老年代、永久代(或元空間)、Eden區和Survivor區概念介紹

在Java虛擬機&#xff08;JVM&#xff09;中&#xff0c;內存管理是自動化的&#xff0c;這主要通過垃圾回收機制實現。JVM將堆內存劃分為不同的區域&#xff0c;以便更高效地管理和回收對象。以下是關于年輕代、老年代、永久代&#xff08;或元空間&#xff09;、Eden區和Surv…

譯 | BBC Studios團隊:貝葉斯合成控制方法SCM的應用案例

來自上傳文件中的文章《Using Causal Inference for Measuring Marketing Impact: How BBC Studios Utilises Geo Holdouts and CausalPy》 本篇介紹了在傳統A/B測試不適用時&#xff0c;如何利用貝葉斯合成控制方法和地理區域保留來評估營銷活動效果。其亮點在于通過構建“反事…

Web開發-PHP應用TP框架MVC模型路由訪問模版渲染安全寫法版本漏洞

我們先使用/index.php/index/index/test&#xff0c;就是圖中的test()方法 /index.php/index/index/index&#xff0c;這個回顯就是111 http://127.0.0.1:83/index.php/index/index/test2?x123456 public function test2() {$x$_GET[x];return $x; } 這里再做一個案例更詳細一…

FreeRTOS列表系統深度解析

FreeRTOS列表系統深度解析 一、核心數據結構 1. 列表控制塊 (List_t) typedef struct xLIST {volatile UBaseType_t uxNumberOfItems; // 當前列表項數量ListItem_t * pxIndex; // 遍歷指針&#xff08;用于輪詢調度&#xff09;MiniListItem_t xListEnd; …