132-QPainter和Graphics/View绘图-QPainter绘图-画刷QBrush的用法

画刷QBrush的用法

QBrush类定义了由QPainter绘制的形状的填充模式。

对于封闭的图形,如矩形、圆等,用画刷 QBrush 可以在其内部填充颜色、样式、渐变、纹理或图案。

用QBrush类创建画刷的方法如下所示其中 bs是 Qt.BrushStyle 的枚举值,用于设置画刷的风格。

from PySide6.QtGui import QBrush

QBrush(self)-> None
QBrush(brush: Union[PySide6.QtGui.QBrush,PySide6.QtCore.Qt.BrushStyle,PySide6.QtCore.Qt.GlobalColor,PySide6.QtGui.QColor,PySide6.QtGui.QGradient,PySide6.QtGui.QImage,PySide6.QtGui.QPixmap])-> None
QBrush(bs: PySide6.QtCore.Qt.BrushStyle)-> None
QBrush(color: PySide6.QtCore.Qt.GlobalColor,bs: PySide6.QtCore.Qt.BrushStyle = Instance(Qt.SolidPattern))-> None
QBrush(color: PySide6.QtCore.Qt.GlobalColor,pixmap: Union[PySide6.QtGui.QPixmap,PySide6.QtGui.QImage,str])-> None
QBrush(color: Union[PySide6.QtGui.QColor,PySide6.QtGui.QRgba64,Any,PySide6.QtCore.Qt.GlobalColor,str,int],bs: PySide6.QtCore.Qt.BrushStyle = Instance(Qt.SolidPattern))-> None
QBrush(color: Union[PySide6.QtGui.QColor,PySide6.QtGui.QRgba64,Any,PySide6.QtCore.Qt.GlobalColor,str,int],pixmap: Union[PySide6.QtGui.QPixmap,PySide6.QtGui.QImage,str])-> None
QBrush(gradient: Union[PySide6.QtGui.QGradient,PySide6.QtGui.QGradient.Preset])-> None
QBrush(image: Union[PySide6.QtGui.QImage,str])-> None
QBrush(pixmap: Union[PySide6.QtGui.QPixmap,PySide6.QtGui.QImage,str])-> None 
画刷QBrush的说明

画笔有一种样式、一种颜色、一种渐变和一种纹理。
笔刷样式()使用BrushStyle枚举定义填充模式。默认的笔刷样式为NoBrush(取决于构造笔刷的方式)。这种风格告诉画家不要填充形状。填充的标准样式是SolidPattern。当使用适当的构造函数创建笔刷时,可以设置样式,此外,setStyle()函数还提供了在构造笔刷后更改样式的方法。

img

笔刷颜色()定义填充图案的颜色。该颜色可以是Qt的预定义颜色之一GlobalColor,也可以是任何其他自定义的QColor。可以分别使用color()和setColor()函数检索和更改当前设置的颜色。
gradient()定义当前样式为LinearGradientPattern、RadialGradientPatterns或ConicalGradientPatten时使用的渐变填充。渐变笔刷是通过在创建QBrush时提供QRadient作为构造函数参数来创建的。Qt提供三种不同的梯度:QLinearGradient、QConicalGradient和QRadialGradient,所有这些都继承了QRadient。

gradient = QRadialGradient(50,50,50,50,50)
gradient.setColorAt(0,QColor.fromRgbF(0,1,0,1))
gradient.setColorAt(1,QColor.fromRgbF(0,0,0,0))
brush = QBrush(gradient)

texture()定义当前样式为TexturePattern时使用的像素贴图。通过在创建笔刷时提供像素贴图或使用setTexture(),可以创建具有纹理的笔刷。
请注意,无论以前的样式设置如何,应用setTexture()都会使style()==TexturePattern。此外,如果样式是渐变,那么调用setColor()也不会有什么不同。如果样式是TexturePattern样式,则情况也是如此,除非当前纹理是QBitmap。
如果笔刷完全不透明,则isOpaque()函数返回true,否则返回false。如果出现以下情况,则认为画笔是不透明的:

  • color()的alpha分量为255。
  • 它的texture()没有alpha通道,也不是QBitmap。
  • gradient()中的所有颜色都有一个255的alpha分量。
brush-outline1Outlines要指定线条和轮廓的样式和颜色,请将QPainter的笔与PenStyle和GlobalColor结合使用:
painter = QPainter(self)
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):attr:<Qt.PenStyle>禁用此行为。

有关绘制的详细信息,请参见Paint System

画刷QBrush的常用方法

画刷 QBrush 的常用方法如表所示,主要方法介绍如下

QBrush的方法和参数类型返回值的类型说明
setStyle(PySide6.QtCore.Qt.BrushStyle)None将笔刷样式设置为BrushStyle
style()Qt.BrushStyle返回笔刷样式。
setTexture(QPixmap)None将笔刷像素贴图设置为像素贴图。样式设置为TexturePattern。
当前笔刷颜色将仅对单色像素贴图有效果,即depth()==1(QBitmaps)。
texture()QPixmap获取纹理图片
setTextureImage(QImage)None将笔刷图像设置为图像。样式设置为TexturePattern。
请注意,当前笔刷颜色不会对单色图像产生任何影响,而不是使用QBitmap调用setTexture()。如果要更改单色图像笔刷的颜色,请使用QBitmap::fromImage()将图像转换为QBitmap,并将生成的QBitmap设置为纹理,或者更改图像颜色表中的条目。
textureImage()Qlmage返回自定义画笔图案,如果未设置自定义画笔图案则返回空图像。
如果纹理被设置为QPixmap,它将被转换为QImage。
setColor(Union[QColor,Qt.GlobalColor,str])Nonei将笔刷颜色设置为给定的颜色。
请注意,如果样式是渐变,则调用setColor()不会产生任何影响。如果样式是TexturePattern样式,则情况也是如此,除非当前纹理是QBitmap。
color()QColor获取颜色
gradient()QGradient返回描述此笔刷的渐变。
setTransform(PySide6.QtGui.QTransform)None将矩阵设置为当前笔刷上的显式变换矩阵。将笔刷变换矩阵与QPainter变换矩阵合并以产生最终结果。
transform()QTransform返回笔刷的当前变换矩阵。
isOpaque()bool如果笔刷完全不透明,则返回true,否则返回false。如果出现以下情况,则认为画笔是不透明的:
color()的alpha分量为255。
它的texture()没有alpha通道,也不是QBitmap。
gradient()中的所有颜色都有一个255的alpha分量。
它是一个扩展的径向梯度。
__ne__(PySide6.QtGui.QBrush)bool如果笔刷与给定的笔刷不同,则返回true;否则返回false。
如果两个笔刷具有不同的样式、颜色或变换,或者根据样式具有不同的像素图或渐变,则它们是不同的。
__eq__(PySide6.QtGui.QBrush)bool如果笔刷等于给定的笔刷,则返回true;否则返回false。
如果两个笔刷具有相同的样式、颜色和变换,并且根据样式具有相同的像素图或渐变,则它们是相等的。
swap(other:PySide6.QtGui.QBrush)用这个刷子交换另一个刷子。这个操作非常快速,而且永远不会失败。
  • 画刷的风格用setStyle(Qt.BrushStyle)方法设置,其中参数 Qt.BrushStyle 的取值和示意图如图示。

    img

    样式类型描 述
    Qt.NoBrush0没有画笔图案
    Qt.SolidPattern1统一的颜色
    Qt.DenselPattern2极其密集的画笔图案
    Qt.Dense2Pattern3非常密集的画笔图案
    Qt.Dense3Pattern4有点密集的画笔图案
    Qt.Dense4Pattern5半密刷图案
    Qt.Dense5Pattern6有点稀疏的画笔图案
    Qt.Dense6Pattern7非常稀疏的画笔图案
    Qt.Dense7Pattern8极稀疏的画笔图案
    Qt.HorPattern9水平线
    Qt.VerPattern10垂直线
    Qt.CrossPattern11跨越水平线和垂直线
    Qt.BDiagPattern12向后的对角线
    Qt.FDiagPattern13前向对角线
    Qt.DiagCrossPattern14穿过对角线
    Qt.LinearGradientPattern15线性渐变(使用专用的QBrush 构造函数设置)
    Qt.ConicalGradientPattern17锥形渐变(使用专用的 QBrush构造函数设置)
    Qt.RadialGradientPattern16径向渐变(使用专用的 QBrush 构造函数设置)
    Qt.TexturePattern24自定义模式(请参考 QBrush.setTexture0)
  • 画刷的纹理可以用setTexture(QPixmap)或 setTexturelmage(QImage)方法来设置,这时样式被设置成QtTexturePattern。

  • 颜色

    QBrush.color()用于定义填充图案的颜色。可以使用Qt.GlobalColor或任何其他自定义QColor 来表示颜色。

    当前的颜色可以分别使用color()函数和 setColor()函数来检索和更改。Qt.GlobalColor支持的标准颜色如表所示。

    颜色类型描 述
    Qt.white3白色(#ffffff)
    Qt.black2黑色(#000000)
    Qt.red7红色(#fE0000)
    Qt.darkRed13深红色(#800000)
    Qt.green8绿色(#00fH00)
    Qt.darkGreen14深绿色(008000)
    Qt.blue9蓝色(#0000r)
    Qt.darkBlue15深蓝色(#000080)
    Qt.cyan10青色(#00f)
    Qt.darkCyan16深青色(#008080)
    Qt.magenta11洋红色(#任00任)
    Qt.darkMagenta17深洋红色(800080)
    Qt.yellow12黄色(#fHH00)
    Qt.darkYellow18深黄色(#808000)
    Qt.gray5灰色(#a0a0a4)
    Qt.darkGray4深灰色(#808080)
    Qt.lightGray6浅灰色(#c0c0c0)
    Qt.transparent19一个透明的黑色值(即 QColor(0,0,0,0))
    Qt.color000个像素值(用于位图)
    Qt.colorl11.个像素值(用于位图)
画刷QBrush的应用实例

下面的程序在窗口中绘制一个矩形框,并在矩形框中用画刷填充网格线

image-20230307000659600

# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/7 0:03
# File_name: 03- 画刷QBrush的应用实例.py


import sys
from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtGui import QPen,QPainter,QBrush
from PySide6.QtCore import Qt.QPointF,QRectF


class MyWindow(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent)

    def paintEvent(self,event):
        painter = QPainter(self)

        pen = QPen()# 钢笔
        pen.setColor(Qt.blue)
        pen.setWidth(5)# 线条宽度
        painter.setPen(pen)# 设置钢笔

        brush = QBrush(Qt.red,Qt.DiagCrossPattern)# 画刷,同时设置颜色和风格
        painter.setBrush(brush)# 设置画刷

        p1 = QPointF(self.width()/ 4,self.height()/ 4)
        p2 = QPointF(3 * self.width()/ 4,3 * self.height()/ 4)
        painter.drawRect(QRectF(p1,p2))# 绘制矩形


if __name__ == '__main__':
    app = QApplication(sys.argv)
    win = MyWindow()

    win.show()
    sys.exit(app.exec())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

士别三日,当挖目相待

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值