画刷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()函数还提供了在构造笔刷后更改样式的方法。
笔刷颜色()定义填充图案的颜色。该颜色可以是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分量。
Outlines | 要指定线条和轮廓的样式和颜色,请将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 的取值和示意图如图示。
样式类型 值 描 述 Qt.NoBrush 0 没有画笔图案 Qt.SolidPattern 1 统一的颜色 Qt.DenselPattern 2 极其密集的画笔图案 Qt.Dense2Pattern 3 非常密集的画笔图案 Qt.Dense3Pattern 4 有点密集的画笔图案 Qt.Dense4Pattern 5 半密刷图案 Qt.Dense5Pattern 6 有点稀疏的画笔图案 Qt.Dense6Pattern 7 非常稀疏的画笔图案 Qt.Dense7Pattern 8 极稀疏的画笔图案 Qt.HorPattern 9 水平线 Qt.VerPattern 10 垂直线 Qt.CrossPattern 11 跨越水平线和垂直线 Qt.BDiagPattern 12 向后的对角线 Qt.FDiagPattern 13 前向对角线 Qt.DiagCrossPattern 14 穿过对角线 Qt.LinearGradientPattern 15 线性渐变(使用专用的QBrush 构造函数设置) Qt.ConicalGradientPattern 17 锥形渐变(使用专用的 QBrush构造函数设置) Qt.RadialGradientPattern 16 径向渐变(使用专用的 QBrush 构造函数设置) Qt.TexturePattern 24 自定义模式(请参考 QBrush.setTexture0) -
画刷的纹理可以用setTexture(QPixmap)或 setTexturelmage(QImage)方法来设置,这时样式被设置成QtTexturePattern。
-
颜色
QBrush.color()用于定义填充图案的颜色。可以使用Qt.GlobalColor或任何其他自定义QColor 来表示颜色。
当前的颜色可以分别使用color()函数和 setColor()函数来检索和更改。Qt.GlobalColor支持的标准颜色如表所示。
颜色类型 值 描 述 Qt.white 3 白色(#ffffff) Qt.black 2 黑色(#000000) Qt.red 7 红色(#fE0000) Qt.darkRed 13 深红色(#800000) Qt.green 8 绿色(#00fH00) Qt.darkGreen 14 深绿色(008000) Qt.blue 9 蓝色(#0000r) Qt.darkBlue 15 深蓝色(#000080) Qt.cyan 10 青色(#00f) Qt.darkCyan 16 深青色(#008080) Qt.magenta 11 洋红色(#任00任) Qt.darkMagenta 17 深洋红色(800080) Qt.yellow 12 黄色(#fHH00) Qt.darkYellow 18 深黄色(#808000) Qt.gray 5 灰色(#a0a0a4) Qt.darkGray 4 深灰色(#808080) Qt.lightGray 6 浅灰色(#c0c0c0) Qt.transparent 19 一个透明的黑色值(即 QColor(0,0,0,0)) Qt.color0 0 0个像素值(用于位图) Qt.colorl 1 1.个像素值(用于位图)
画刷QBrush的应用实例
下面的程序在窗口中绘制一个矩形框,并在矩形框中用画刷填充网格线
# -*- 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())