当前位置: 首页 > news >正文

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.dtcms.com/a/310689.html

相关文章:

  • 使用全连接神经网络训练和预测MNIST以及CIFAR10
  • 十、SpringBootWeb快速入门-入门案例
  • 玻尔兹曼分布与玻尔兹曼探索
  • 户外广告牌识别误检率↓78%!陌讯动态感知算法实战解析
  • 力扣面试150题--数字范围按位与
  • 【文章素材】ACID 原子性与数据库
  • 五自由度机械臂阻抗控制下的力跟踪
  • 神经网络学习笔记
  • 台式机 Server 20.04 CUDA11.8
  • JAVA,Filter和Interceptor
  • ThreadLocal总结
  • 基于倍增的LCA + kruskal重构树 + 并查集
  • 可编辑234页PPT | 某制造集团供应链流程分析和数字化转型解决方案
  • JavaScript 语句和函数
  • ensp防火墙安全策略实验
  • 【全网首个公开VMware vCenter 靶场环境】 Vulntarget-o 正式上线
  • Linux权限提升
  • shell编程练习,实现循环创建账户、测试主机连通性、批量修改主机root密码等功能
  • Linux 用户与组管理:从配置文件到实操命令全解析
  • Lecture 7: Processes 4, Further Scheduling
  • 嵌入式系统中常用通信协议
  • 高压大电流与低压大电流电源的设计难点
  • QT中重写事件过滤失效(返回了多个事件)
  • Jetpack Compose Column组件之focusProperties修饰符
  • 基于C#和NModbus4库实现的Modbus RTU串口通信
  • 【工具分享】模拟接口请求响应的Chrome插件ModResponse
  • 光伏运维数据透明化,发电量提高45%
  • Cursor免费使用工具
  • 配置多数据源dynamic-datasource 开箱即用方案​
  • ubuntu使用man手册中文版办法