130-QPainter和Graphics/View绘图-QPainter绘图-QPainter类

QPainter绘图

QPainter 是基本的绘图方法,可以绘制各种各样的图形、文字和图像,可以用渐变色填充区域。同时 QPainter 绘图方法是 Graphics/View 绘图框架的基础。

QPainter类

利用QPainer 类可以在绘图设备上绘制图片,文字和几何形状,几何形状有点、线、矩形、椭圆、弧形、弦形、饼图、多边形和贝塞尔曲线等。

绘图设备是从 QPaintDevice 继承的类,包括继承自QWidget 的窗口各种控件QPixmap 和 Qlmage。

如果绘图设备是窗口或控件,则QPainter 绘图一般放到 paintEvent()事件或者被 paintEvent()事件调用的函数中用QPainter 类创建

绘图实例的方法如下其中QPaintDevice 是指继承自QPaintDevice的绘图设备。

如果使用不带设备的 QPainter()方法创建实例对象,例如 painter=QPainter(),则在开始绘图前需要用painter,begin(QPaintDevice)方法指定绘图设备,此时painter.isActive()的返回值是 True绘图完成后,需要用painter.end()方法声明完成绘图,之后可以用begin()方法重新指定绘图设备。begin()和 end()方法都返回 bool值。

from PySide6.QtGui import QPainter

QPainter(self)-> None
QPainter(arg__1: PySide6.QtGui.QPaintDevice)-> None 

构造一个立即开始绘制绘制设备的绘制器。
这个构造函数对于短命的绘制者来说很方便,例如在paintEvent()中,并且应该只使用一次。构造函数为您调用begin(),QPainter析构函数自动调用end()。
下面是一个使用begin()和end()的示例:

def paintEvent(self,arg__0):

    p = QPainter()
    p.begin(self)
    p.drawLine(drawingCode)# drawing code
    p.end()

使用此构造函数的相同示例:

def paintEvent(self,arg__0):

    p = QPainter(self)
    p.drawLine(drawingCode)# drawing code

由于构造函数无法在painter初始化失败时提供反馈,因此您应该使用begin()和end()在外部设备(如打印机)上进行绘制。

QPainte说明

QPainter提供了高度优化的功能,可以完成大多数绘图GUI程序所需的功能。它可以画出各种各样的东西,从简单的线条到复杂的形状,比如馅饼和和弦。它还可以绘制对齐的文本和像素图。通常,它绘制的是"自然"坐标系,但它也可以进行视图和世界变换。QPainter可以对继承QPaintDevice类的任何对象进行操作。

QPainter的常见用途是在小部件的绘画事件中:构造和自定义(例如设置笔或画笔)画家。然后画画。请记住在绘制后销毁QPainter对象。例如:

def paintEvent(self,arg__0):

    painter = QPainter(self)
    painter.setPen(Qt.blue)
    painter.setFont(QFont("Arial",30))
    painter.drawText(rect(),Qt.AlignCenter,"Qt")

QPainter的核心功能是绘图,但该类还提供了几个功能,允许您自定义QPainter设置及其渲染质量,以及其他启用剪裁的功能。此外,您可以通过指定画家的构图模式来控制不同形状如何合并在一起。

isActive()函数指示画家是否处于活动状态。painter由begin()函数和接受QPaintDevice参数的构造函数激活。end()函数和析构函数会将其停用。

QPainter与QPaintDevice和QPaintEngine类一起构成了Qt油漆系统的基础。QPainter是用于执行绘图操作的类。QPaintDevice表示可以使用QPainter在其上进行绘制的设备。QPaintEngine提供了画家用来绘制不同类型设备的界面。如果绘制器处于活动状态,device()将返回绘制器绘制的绘制设备,paintEngine()返回绘制器当前正在运行的绘制引擎。有关详细信息,请参阅绘制系统。

有时,让别人在一个不寻常的QPaintDevice上作画是可取的。QPainter支持一个静态函数setRedirected()来实现这一点。

设置

有几个设置可以自定义,以便根据您的偏好进行QPainter绘制:

  • font()是用于绘制文本的字体。如果painter是Active(),则可以分别使用fontInfo()和fontMetrics()函数检索有关当前设置的字体及其度量的信息。
  • brush()定义用于填充形状的颜色或图案。
  • pen()定义用于绘制线条或边界的颜色或点画。
  • backgroundMode()定义是否有background(),即它是OpaqueMode或TransparentMode。
  • background()仅适用于backgroundMode()为OpaqueMode且pen()为点画的情况。在这种情况下,它描述了点画中背景像素的颜色。
  • brushOrigin()定义平铺笔刷的原点,通常是小部件背景的原点。
  • viewport()、window()、worldTransform()组成了画家的坐标变换系统。有关详细信息,请参见"坐标变换"部分和"坐标系"文档。
  • hasClipping()告诉画家是否进行剪辑。(绘画设备也会被夹住。)如果画家被夹住,它会被夹住到clipRegion()。
  • layoutDirection()定义画家在绘制文本时使用的布局方向。
  • worldMatrixEnabled()告诉是否启用了世界转换。
  • viewTransformEnabled()告诉是否启用了视图转换。

请注意,其中一些设置反映了某些绘制设备中的设置,例如font()。begin()函数(或等效的QPainter构造函数)从绘制设备复制这些属性。

您可以随时通过调用save()函数来保存QPainter的状态,该函数将所有可用设置保存在内部堆栈上。restore()函数会将它们弹回来。

绘画

QPainter提供了绘制大多数基元的函数:drawPoint()、drawPoints()、drawLine()、drawRect()、DRAwRoundRect(。两个方便函数drawRects()和drawLines()使用当前画笔在给定的QRects或QLines数组中绘制给定数量的矩形或直线。

QPainter类还提供了fillRect()函数,该函数用给定的QBrush填充给定的QRect,以及擦除给定矩形内区域的eraseRect(()函数。

所有这些函数都有整数和浮点两种版本。

qpainter-basicdrawing1基本绘图示例Basic Drawing Example
"基本图形"示例显示了如何使用QPainter类以各种样式显示基本图形基本体。

如果需要绘制复杂的形状,尤其是需要重复绘制,请考虑创建一个QPainterPath并使用drawPath()绘制。

画家路径示例Painter Paths exampleqpainter-painterpaths2
QPainterPath类为绘制操作提供了一个容器,使图形能够被构造和重用。
"绘制器路径"示例显示了如何使用绘制器路径来构建复杂的形状以进行渲染。

QPainter还提供了fillPath()函数,该函数用给定的QBrush填充给定的QPainterPath,以及绘制给定路径轮廓(即笔划路径)的strokePath()功能。
另请参阅矢量变形示例,该示例显示了如何使用高级矢量技术使用QPainterPath绘制文本,Gradients示例显示了Qt中可用的不同类型的渐变,Path Stroking示例显示了Qt的内置短划线图案,并显示了自定义图案如何用于扩展可用图案的范围。

image-20230428133355012

文本绘制是使用drawText()完成的。当您需要细粒度定位时,boundingRect()告诉给定的drawText()命令将在何处绘制。

绘制像素图和图像

有绘制像素图/图像的函数,即drawPixmap()、drawImage()和drawTiledPixmap(。drawPixmap()和drawImage()都会产生相同的结果,只是drawPixmap()在屏幕上更快,而drawImages()在QPrinter或其他设备上可能更快。
有一个drawPicture()函数,用于绘制整个QPicture的内容。drawPicture()函数是唯一一个忽略所有绘制者设置的函数,因为QPicture有自己的设置。

绘制像素图和图像的高分辨率版本

高分辨率版本的像素图的设备像素比率值大于1(请参阅QImageReader,devicePixelRatio())。如果它与底层QPaintDevice的值相匹配,它将直接绘制到设备上,而不应用额外的转换。

例如,在设备像素比为2的高DPI屏幕上绘制64x64像素大小的QPixmap时就是这种情况,该屏幕也具有设备像素比2。请注意,像素图在用户空间中有效地为32x32像素。Qt中基于像素图大小计算布局几何图形的代码路径将使用此大小。这样做的净效果是,像素图显示为高DPI像素图,而不是大像素图。

渲染质量

为了使用QPainter获得最佳渲染结果,您应该使用独立于平台的QImage作为绘制设备;即使用QImage将确保结果在任何平台上具有相同的像素表示。
QPainter类还通过其RenderHint枚举和对浮点精度的支持提供了一种控制渲染质量的方法:用于绘制基本体的所有函数都有浮点版本。这些通常与抗锯齿渲染提示结合使用。

同心圆示例Concentric Circles Exampleqpainter-concentriccircles6
同心圆示例显示了在绘制自定义小部件时使用浮点精度和抗锯齿可以获得的改进的渲染质量。
应用程序的主窗口显示了几个小部件,这些小部件是使用精度和抗锯齿的各种组合绘制的。

RenderHint枚举为QPainter指定任何给定引擎都可能遵守或不遵守的标志。抗锯齿表示引擎应在可能的情况下抗锯齿基本体的边缘,TextAntialiasing表示引擎应尽可能抗锯齿文本,SmoothPixmapTransform表示引擎应使用平滑像素图转换算法。
renderHints()函数返回一个标志,用于指定为此绘制器设置的渲染提示。使用setRenderHint()函数可以设置或清除当前设置的RenderHints。

坐标变换

通常,QPainter在设备自己的坐标系(通常是像素)上操作,但QPainter对坐标变换有很好的支持。

image-20230428133644494

最常用的变换是缩放、旋转、平移和剪切。使用scale()函数按给定的偏移量缩放坐标系,使用rotate()函数顺时针旋转,使用translate()函数平移(即向点添加给定的偏移)。也可以使用shear()函数围绕原点扭曲坐标系。有关剪切坐标系的可视化,请参见仿射变换示例。
另请参见"变换"示例,该示例显示了变换如何影响QPainter渲染图形基本体的方式。特别是,它显示了转换的顺序如何影响结果。

仿射变换示例Affine Transformations Exampleqpainter-affinetransformations11
仿射变换示例显示了Qt对绘制操作执行仿射变换的能力。该演示还允许用户对转换操作进行实验,并立即看到结果。

所有变换操作都在变换世界Transform()上操作。矩阵将平面中的一个点转换为另一个点。有关变换矩阵的详细信息,请参见坐标系和QTransform文档。

setWorldTransform()函数可以替换或添加到当前设置的worldTransform(()中。resetTransform()函数重置使用translate()、scale()、shear()、rotate()、setWorldTransform(),setViewport()和setWindow()函数进行的任何转换。deviceTransform()返回将逻辑坐标转换为平台相关绘制设备的设备坐标的矩阵。只有在依赖于平台的句柄上使用平台绘制命令时,才需要后一个函数,而且平台本身不进行转换。

使用QPainter绘制时,我们使用逻辑坐标指定点,然后将逻辑坐标转换为绘制设备的物理坐标。逻辑坐标到物理坐标的映射由QPainter的combinedTransform()处理,它是viewport()和window()以及worldTransform(()的组合。viewport()表示指定任意矩形的物理坐标,window()在逻辑坐标中描述相同的矩形,worldTransform()与变换矩阵相同。

另请参见坐标系

剪裁

QPainter可以将任何绘图操作剪裁到矩形、区域或矢量路径。使用函数clipRegion()和clipPath()可以获得当前剪辑。路径或区域是首选(更快)取决于底层的paintEngine()。例如,QImage绘制引擎更喜欢路径,而X11绘制引擎则更喜欢区域。设置剪辑是在画家的逻辑坐标中完成的。

在QPainter的剪裁之后,绘画设备也可以剪裁。例如,大多数小部件会剪切掉子小部件使用的像素,而大多数打印机会剪切掉纸张边缘附近的区域。clipRegion()或hasClipping()的返回值不会反映此附加剪辑。

构图模式

QPainter提供了CompositionMode枚举,该枚举定义了用于数字图像合成的Porter-Duff规则;它描述了一个模型,用于将一个图像(源)中的像素与另一个图像中的像素(目的地)进行组合。

两种最常见的合成形式是Source和SourceOver。Source用于在绘制设备上绘制不透明对象。在这种模式下,源中的每个像素都会替换目标中的相应像素。在SourceOver组合模式中,源对象是透明的,并且绘制在目标的顶部。

请注意,合成转换按像素操作。因此,使用图形图元本身和其边界矩形之间存在差异:边界矩形包含alpha==0的像素(即图元周围的像素)。这些像素将覆盖其他图像的像素,从而有效地清除这些像素,而基本体仅覆盖其自身的区域。

合成模式示例Composition Modes Exampleqpainter-compositiondemo12
Qt的examples目录中提供了Composition Mode示例,允许您对各种合成模式进行实验,并立即看到结果。

限制

如果您使用Qt基于光栅的绘制引擎的坐标,需要注意的是,虽然可以使用大于+/-2 15的坐标,但不保证使用该范围以外的坐标进行的任何绘制都会显示出来;可以剪裁该绘图。这是由于在实现中使用了短int。
Qt的描边器生成的轮廓只是处理弯曲形状时的近似值。在大多数情况下,不可能使用另一个贝塞尔曲线段来表示贝塞尔曲线段的轮廓,因此Qt通过使用几个较小的曲线来近似曲线轮廓。由于性能原因,Qt用于这些轮廓的曲线数量是有限的,因此当使用大的笔宽度或比例时,轮廓误差会增加。要生成误差较小的轮廓,可以使用QPainterPathStroker类,该类具有setCurveThreshold成员函数,让用户指定误差容限。另一种解决方法是先将路径转换为多边形,然后绘制多边形。

表演

QPainter是一个丰富的框架,允许开发人员进行各种图形操作,如渐变、合成模式和矢量图形。QPainter可以在各种不同的硬件和软件堆栈中实现这一点。当然,硬件和软件的底层组合对性能有一定的影响,并且由于排列的数量,确保每一次操作都能与构图模式、画笔、剪裁、变换等的所有各种组合快速组合,几乎是不可能完成的任务。作为折衷方案,我们选择了QPainter API和后端的一个子集,在给定的硬件和软件组合中,性能保证会尽可能好。
作为高性能发动机,我们关注的后端有:

  • 光栅-这个后端在纯软件中实现所有渲染,并且总是用于渲染到QImages中。为了获得最佳性能,请仅使用格式类型format_ARGB32_Premultiplied、format_RGB32或format_RGB16。任何其他格式,包括format_ARGB32,其性能都要差得多。该引擎默认用于QWidget和QPixmap。
  • OpenGL 2.0(ES)-此后端是硬件加速图形的主要后端。它可以在支持OpenGL 2.0或OpenGL/ES 2.0规范的台式机和嵌入式设备上运行。这包括过去几年生产的大多数图形芯片。该引擎可以通过在QOpenGLWidget上使用QPainter来启用。

这些操作是:

  • 简单的变换,意味着平移和缩放,加上0、90、180、270度的旋转。
  • drawPixmap()与简单变换和非平滑变换模式下的不透明度相结合(QPainter::SmoothPixmapTransform未作为渲染提示启用)。
  • 矩形填充有纯色、双色线性渐变和简单变换。
  • 具有简单变换和相交剪裁的矩形剪裁。
  • 合成模式QPainter::合成模式_Source和合成模式_SsourceOver。
  • 使用纯色和双色线性渐变填充的圆角矩形填充。
  • 通过qDrawBorderPixmap获得3x3个修补的像素图。

此列表指示在性能至关重要的应用程序中安全使用哪些功能。对于某些设置,其他操作可能也很快,但在广泛使用它们之前,建议在软件最终运行的系统上对它们进行基准测试和验证。也有一些情况下,可以使用昂贵的操作,例如,当结果缓存在QPixmap中时。

QPainter 状态设置的方法
QPainter的状态设置方法及参数类型说明
setBackground(bg: Union[QBrush,Qt.BrushStyle,Qt.GlobalColor,QColor,QGradient,QImage,QPixmap])设置背景色,背景色只对不透明 的文字、虚线或位图起作用
setBackgroundMode(mode:Qt.BGMode)设置透明或不透明背景模式
setBrush(brush:Union[QBrush,Qt.BrushStyle,Qt.GlobalColor,QColor,QGradient,QImage,QPixmap])设置画刷
setBrush(style:Qt.BrushStyle)设置画刷
setBrushOrigin(Union[QPointF,QPoint,QPainterPath.Element])设置画刷的起点
setBrushOrigin(x:int,y:int)设置画刷的起点
setClipPath(QPainterPath,op:Qt.ClipOperation=Qt.ReplaceClip)设置剪切路径
setClipRect(QRect,op:Qt.ClipOperation=Qt.ReplaceClip)设置剪切矩形区域
setClipRect(Union[QRectF,QRect],op=Qt.ReplaceClip)设置剪切矩形区域
setClipRect(x: int,y: int,w: int,h:int,op=Qt.ReplaceClip)设置剪切矩形区域
setClipRegion(Union[QRegion,QBitmap,QPolygon,QRect],op: Qt.ClipOperation=Qt.ReplaceClip)设置剪切区域:
setClipping(enable:bool)设置是否启动剪切
setCompositionMode(mode:QPainter.CompositionMode)设置图形合成模式
setFont(f:Union[QFont,str,Sequence[str]])设置字体
setLayoutDirection(direction:Qt.LayoutDirection)设置布局方向
setOpacity(opacity:float)设置不透明度
setPen(color: Union[QColor,Qt.GlobalColor,str])设置钢笔
setPen(pen: Union[QPen,Qt.PenStyle,QColor])设置钢笔
setPen(style: Qt.PenStyle)设置钢笔
setRenderHint(hint: QPainter.RenderHint,on:bool=True)设置渲染模式,例如抗锯齿
setRenderHints(hints:QPainter.RenderHints,on: bool=True)设置多个渲染模式
setTransform(transform:QTransform,combine: bool=False)设置全局变换矩阵
setWorldTransform(matrix: QTransform,combine: bool=False)设置全局变换矩阵
setViewTransformEnabled(enable:bool)设置是否启动视口变换
setViewport(viewport: QRect)设置视口
setViewport(x:int,y:int.w:int,h:int)设置视口
setWindow(window:QRect)设置逻辑窗口
setWindow(x: int,y: int,w:int,h:int)设置逻辑窗口
setWorldMatrixEnabled(enabled: bool)设置是否启动全局矩阵变换
save()保存状态到堆栈中
restore()从堆栈中恢复状态
  • isActive()函数指示画家是否处于活动状态。
    • 画家由 begin()函数和采用QPaintDevice 参数的构造函数激活。
    • end()函数和析构函数将其停用。
  • font()是用于绘制文本的字体。如果画家是 Active(),则可以分别使用fontInfo()和 fontMetrics()函数检索有关当前设置的字体及其度量的信息。
  • brush()定义用于填充形状的颜色或图案。
  • pen()定义用于绘制线条或边界的颜色或点画。
  • backgroundMode()定义是否存在 background(),即它是 or 或 。OpaqueMode TransparentMode
  • background()仅在 backgroundMode()为 而 pen()为 stipple 时才适用。在这种情况下,它描述了小节中背景像素的颜色。OpaqueMode
  • brushOrigin()定义了平铺画笔的原点,通常是小部件背景的原点。
  • viewport(),window(),worldTransform()构成了画家的坐标变换系统。有关详细信息,请参阅坐标系文档。Coordinate Transformations
  • hasClipping()告诉画家是否剪辑。(绘画装置也会夹住。如果画家剪辑,它会剪辑到剪辑区域()。
  • layoutDirection()定义绘制者在绘制文本时使用的布局方向。
  • worldMatrixEnabled()指示是否启用了世界转换。
  • viewTransformEnabled()指示是否启用了视图转换。
QPainter枚举值
  • PySide6.QtGui.QPainter.RenderHint

(inherits enum.Flag)Renderhint用于为QPainter指定任何给定引擎可能遵守或不遵守的标志。

ConstantDescription
QPainter.Antialiasing指示引擎应在可能的情况下对基本体的边进行抗锯齿处理。
QPainter.TextAntialiasing指示引擎应尽可能消除文本失真。若要强制禁用文本的抗锯齿,请不要使用此提示。相反,在字体的样式策略上设置NoAntialias。
QPainter.SmoothPixmapTransform指示引擎应该使用平滑的像素图转换算法(如双线性),而不是最近邻。
QPainter.VerticalSubpixelPositioning如果字体引擎支持,允许文本在垂直和水平方向上以像素的分数定位。当提示首选项为PreferNoHinting时,Freetype目前在所有平台上都支持这一点,在macOS上也是如此。对于大多数用例来说,这不会提高视觉质量,但可能会增加内存消耗并降低文本渲染性能。因此,除非用例需要,否则不建议启用此功能。其中一个用例可以是将字形与其他视觉基元对齐。该数值已在第6.1号问题中添加。
QPainter.LosslessImageRendering尽可能使用无损图像渲染。目前,此提示仅在QPainter用于通过QPrinter或QPdfWriter输出PDF文件时使用,其中drawImage()/drawPixmap()调用将使用无损压缩算法而不是有损JPEG压缩对图像进行编码。该数值在第5.13号问题中增加。
QPainter.NonCosmeticBrushPatterns使用具有预定义图案样式之一的笔刷进行绘制时,也要变换图案以及要绘制的对象。默认情况是将图案视为装饰图案,这样图案像素将直接映射到设备像素,而与任何活动变换无关。这一数值在第6.4季度增加。
  • PySide6.QtGui.QPainter.PixmapFragmentHint

    ConstantDescription
    QPainter.OpaqueHint(继承enum.Flag)表示要绘制的像素图片段是不透明的。不透明碎片的绘制速度可能更快。
  • PySide6.QtGui.QPainter.CompositionMode

    定义数字图像合成支持的模式。合成模式用于指定如何将一个图像(源)中的像素与另一个图像中的像素(目的地)合并。
    请注意,以RasterOp前缀表示的逐位光栅操作模式仅在X11和光栅绘制引擎中本地支持。这意味着在Mac上使用这些模式的唯一方法是通过QImage。带有alpha组件的画笔不支持RasterOp表示的混合模式。此外,启用"抗锯齿"渲染提示将有效地禁用"RasterOp"模式。

    ../../_images/qpainter-compositionmode1.png

    ../../_images/qpainter-compositionmode2.png

    最常见的类型是SourceOver(通常称为alpha混合),其中源像素以源的alpha分量定义像素的半透明性的方式混合在目标像素的顶部。
    几种合成模式需要源图像或目标图像中的alpha通道才能产生效果。为了获得最佳性能,首选图像格式format_ARGB32_Premultiplied。
    当设置构图模式时,它适用于所有绘制操作符、笔、画笔、渐变和像素图/图像绘制。

    ConstantDescription
    QPainter.CompositionMode_SourceOver这是默认模式。源的alpha用于混合目标顶部的像素。
    QPainter.CompositionMode_DestinationOver目的地的alpha用于将其混合到源像素的顶部。此模式与CompositionMode_SourceOver相反。
    QPainter.CompositionMode_Clear目标中的像素将被清除(设置为完全透明),与源无关。
    QPainter.CompositionMode_Source输出是源像素。(这意味着基本的复制操作,并且在源像素不透明时与SourceOver相同)。
    QPainter.CompositionMode_Destination输出是目标像素。这意味着混合没有效果。此模式与CompositionMode_Source相反。
    QPainter.CompositionMode_SourceIn输出是源,其中alpha被目的地的alpha减少。
    QPainter.CompositionMode_DestinationIn输出是目的地,其中alpha被源的alpha减少。此模式与CompositionMode_SourceIn相反。
    QPainter.CompositionMode_SourceOut输出是源,其中alpha减少了目标的倒数。
    QPainter.CompositionMode_DestinationOut输出是目的地,其中alpha减少了源的倒数。此模式与CompositionMode_SourceOut相反。
    QPainter.CompositionMode_SourceAtop源像素在目的地的顶部混合,源像素的alpha减去目的地像素的alpha。
    QPainter.CompositionMode_DestinationAtop目标像素在源的顶部混合,目标像素的alpha减少目标像素的alpha。此模式与CompositionMode_SourceAtop相反。
    QPainter.CompositionMode_Xor源的alpha被减少了目标alpha的倒数,源与目标合并,目标的alpha被削减了源alpha的倒数。CompositionMode_Xor与按位的Xor不同。
    QPainter.CompositionMode_Plus将源像素和目标像素的alpha和颜色相加在一起。
    QPainter.CompositionMode_Multiply输出是源颜色乘以目标颜色。将颜色与白色相乘会使颜色保持不变,而将颜色与黑色相乘会产生黑色。
    QPainter.CompositionMode_Screen源颜色和目标颜色反转,然后相乘。用白色屏蔽颜色会产生白色,而用黑色屏蔽颜色会使颜色保持不变。
    QPainter.CompositionMode_Overlay根据目标颜色对颜色进行倍增或筛选。目的地颜色与源颜色混合,以反映目的地的亮度或暗度。
    QPainter.CompositionMode_Darken将选择源颜色和目标颜色中较暗的颜色。
    QPainter.CompositionMode_Lighten将选择源颜色和目标颜色中较浅的颜色。
    QPainter.CompositionMode_ColorDodge目标颜色会变亮以反映源颜色。黑色的源颜色保持目标颜色不变。
    QPainter.CompositionMode_ColorBurn目标颜色变暗以反映源颜色。白色的源颜色保持目标颜色不变。
    QPainter.CompositionMode_HardLight根据源颜色对颜色进行倍增或筛选。光源颜色会使目标颜色变亮,而暗光源颜色会将目标颜色变暗。
    QPainter.CompositionMode_SoftLight根据源颜色使颜色变暗或变亮。类似于CompositionMode_HardLight。
    QPainter.CompositionMode_Difference从较亮的颜色中减去较暗的颜色。用白色绘制会反转目标颜色,而用黑色绘制会使目标颜色保持不变。
    QPainter.CompositionMode_Exclusion类似于CompositionMode_Difference,但对比度较低。用白色绘制会反转目标颜色,而用黑色绘制会使目标颜色保持不变。
    QPainter.RasterOp_SourceOrDestination对源像素和目标像素执行逐位"或"运算(src OR dst)。
    QPainter.RasterOp_SourceAndDestination对源像素和目标像素执行逐位AND运算(src AND dst)。
    QPainter.RasterOp_SourceXorDestination对源像素和目标像素执行逐位XOR运算(src XOR dst)。
    QPainter.RasterOp_NotSourceAndNotDestination对源像素和目标像素执行逐位NOR运算((NOT src)and(NOT dst))。
    QPainter.RasterOp_NotSourceOrNotDestination对源像素和目标像素执行逐位NAND操作((NOT src)或(NOT dst))。
    QPainter.RasterOp_NotSourceXorDestination执行逐位操作,其中源像素被反转,然后与目标进行XOR’ed((NOT src)XOR dst)。
    QPainter.RasterOp_NotSource执行源像素反转的逐位操作(NOT src)。
    QPainter.RasterOp_NotSourceAndDestination执行逐位操作,其中源被反转,然后与目标进行"与"运算((NOT src)and dst)。
    QPainter.RasterOp_SourceAndNotDestination执行逐位操作,其中源与反转的目标像素进行"与"运算(src AND(NOT dst))。
    QPainter.RasterOp_NotSourceOrDestination执行逐位操作,其中源被反转,然后与目标进行"或"运算((NOT src)或dst)。
    QPainter.RasterOp_ClearDestination目标中的像素将被清除(设置为0),与源无关。
    QPainter.RasterOp_SetDestination目的地中的像素被设置(设置为1),与源无关。
    QPainter.RasterOp_NotDestination执行逐位操作,其中目标像素反转(NOT dst)。
    QPainter.RasterOp_SourceOrNotDestination执行逐位运算,其中源与反转的目标像素进行"或"运算(src OR(NOT dst))。
用QPainter 绘制五角星的实例

下面先举一个用QPainter 绘制五角星的实例,实例中计算

  • 5个顶点的坐标,用QPainter绘制折线方法

  • drawPolyline()绘制五角星并在每个顶点上绘制名称

    image-20230306233158729

# -*- coding: UTF-8 -*-
# File date: Hi_2023/3/6 23:23
# File_name: 01-用QPainter绘制五角星的实例.py


import sys,math
from PySide6.QtWidgets import QApplication,QWidget
from PySide6.QtGui import QPen,QPainter
from PySide6.QtCore import QPointF
from math import cos,sin,pi


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

        self.resize(600,500)
        self.painter = QPainter()

    def paintEvent(self,event):
        if self.painter.begin(self):
            font = self.painter.font()
            font.setPixelSize(20)
            self.painter.setFont(font)# 设置字体

            pen = QPen()# 钢笔
            pen.setWidth(5)# 线条宽度
            self.painter.setPen(pen)# 设置钢笔
            r = 100  # 五角星的外接圆半径

            x = self.width()/ 2
            y = self.height()/ 2
            p1 = QPointF(r * cos(-90 * pi / 180)+ x,r * sin(-90 * pi / 180)+ y)
            p2 = QPointF(r * cos(-18 * pi / 180)+ x,r * sin(-18 * pi / 180)+ y)
            p3 = QPointF(r * cos(54 * pi / 180)+ x,r * sin(54 * pi / 180)+ y)
            p4 = QPointF(r * cos(126 * pi / 180)+ x,r * sin(126 * pi / 180)+ y)
            p5 = QPointF(r * cos(198 * pi / 180)+ x,r * sin(198 * pi / 180)+ y)

            self.painter.drawPolyline([p1,p3,p5,p2,p4,p1])# 绘制折线
            self.painter.drawText(p1,"p1")# 绘制文字
            self.painter.drawText(p2,"p2")
            self.painter.drawText(p3,"p3")
            self.painter.drawText(p4,"p4")
            self.painter.drawText(p5,"p5")

            if self.painter.isActive():
                self.painter.end()


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

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

QPainter类方法汇总

方法描述
background()->PySide6.QtGui.QBrush返回当前背景笔刷。
backgroundMode()->PySide6.QtCore.Qt.BGMode返回当前的背景模式。
Qt.TransparentMode
Qt.OpaqueMode
begin(arg__1)->bool开始绘制绘制设备,如果成功则返回true;否则返回false。
请注意,当调用begin()时,所有绘制器设置(setPen()、setBrush()等)都会重置为默认值。
可能出现的错误是严重的问题,例如:painter.begin(0)# impossible - paint device cannot be 0
image = QPixmap(0,0)
painter.begin(image)# impossible - image.isNull()== true
painter.begin(myWidget)
painter2.begin(myWidget)# impossible - only one painter at a time
请注意,大多数时候,您可以使用其中一个构造函数而不是begin(),并且end()在销毁时会自动完成。
beginNativePainting()刷新绘制管道,并为用户直接向底层图形上下文发出命令做准备。后面必须是对endNativePainting()的调用。
请注意,只有基础绘制引擎更改的状态才会重置为各自的默认状态。我们重新设置的状态可能会随着发布而变化。以下状态当前在OpenGL 2引擎中重置:
- 禁用混合
- 深度、模板和剪刀测试被禁用
- 活动纹理单元重置为0
- 深度遮罩、深度函数和清除深度将重置为默认值
- 模具掩码、模具操作和模具函数将重置为默认值
- 当前颜色重置为纯白色

例如,如果用户在beginNativePaint()/endNativePainting()块内更改OpenGL多边形模式,则endNativePaitting()不会将其重置为默认状态。以下是一个示例,显示了painter命令和原始OpenGL命令的混合:
painter = QPainter(self)
painter.fillRect(0,0,128,128,Qt.green)
painter.beginNativePainting()
glEnable(GL_SCISSOR_TEST)
glScissor(0,0,64,64)
glClearColor(1,0,0,1)
glClear(GL_COLOR_BUFFER_BIT)
glDisable(GL_SCISSOR_TEST)
painter.endNativePainting()
boundingRect(rect:PySide6.QtCore.QRect,flags:int,text:str)->PySide6.QtCore.QRect这是一个重载函数。
返回文本的边界矩形,当使用当前设置的font()使用指定标志在给定矩形内绘制时,该矩形将显示出来。
boundingRect(rect: PySide6.QtCore.QRectF,text:str[,o:PySide6.QtGui.QTextOption=QTextOption()])->PySide6.QtCore.QRectF这是一个重载函数。
这个重载函数没有将标志指定为AlignmentFlag和TextFlag的逐位OR,而是采用了一个选项参数。QTextOption类提供了对常规富格文本特性的描述。
boundingRect(rect:PySide6.QtCore.QRectF,flags:int,text:str)->PySide6.QtCore.QRectF返回文本的边界矩形,当使用当前设置的font()使用指定标志在给定矩形内绘制时,该矩形将显示;即,函数告诉当给定相同的参数时,drawText()函数将绘制到哪里。
如果使用指定的标志,文本不适合给定的矩形,函数将返回所需的矩形。
flags参数是以下标志的按位"或":
AlignLeft
AlignRight
AlignHCenter
AlignTop
AlignBottom
AlignVCenter
AlignCenter
TextSingleLine
TextExpandTabs
TextShowMnemonic
TextWordWrap
TextIncludeTrailingSpaces
如果设置了几个水平对齐标志或几个垂直对齐标志,则生成的对齐未定义。
boundingRect(x:int,y:int,w:int,h:int,flags:int,text:str)->PySide6.QtCore.QRect这是一个重载函数。
返回给定文本的边界矩形,当在矩形内绘制时,该矩形从点(x,y)开始,宽度为w,高度为h。
brush()->PySide6.QtGui.QBrush返回画家的当前画笔。
brushOrigin()->PySide6.QtCore.QPoint返回当前设置的笔刷原点。
clipBoundingRect()->PySide6.QtCore.QRectF如果存在剪辑,则返回当前剪辑的边界矩形;否则返回一个空矩形。请注意,剪辑区域是以逻辑坐标给出的。
不能保证边界矩形是紧密的。
clipPath()->PySide6.QtGui.QPainterPath返回逻辑坐标中的当前剪辑路径。
QPainter不会显式存储组合剪辑,因为这是由底层的QPaintEngine处理的,因此会根据需要重新创建路径并将其转换到当前的逻辑坐标系。这可能是一项昂贵的操作。
clipRegion()->PySide6.QtGui.QRegion返回当前设置的剪辑区域。请注意,剪辑区域是以逻辑坐标给出的。
combinedTransform()->PySide6.QtGui.QTransform返回结合当前窗口/视口和世界变换的变换矩阵。
compositionMode()->PySide6.QtGui.QPainter.CompositionMode返回当前合成模式。
device()->PySide6.QtGui.QPaintDevice返回此绘制器当前正在其上绘制的绘制设备,如果绘制器未处于活动状态,则返回"无"。
deviceTransform()->PySide6.QtGui.QTransform返回从逻辑坐标转换为平台相关绘制设备的设备坐标的矩阵。
只有当在依赖于平台的句柄(handle)上使用平台绘制命令时,才需要此函数,并且平台不会在本机中进行转换。
可以查询PaintEngineFeature枚举,以确定平台是否执行转换。
drawArc(arg__1:PySide6.QtCore.QRect,a:int,alen:int)这是一个重载函数。
绘制由给定矩形、startAngle和spanAngle定义的圆弧。
drawArc(rect:PySide6.QtCore.QRectF,a:int,alen:int)绘制由给定矩形、startAngle和spanAngle定义的圆弧。
startAngle和spanAngle必须指定为1/16度,即一个完整的圆等于5760(16*360)。角度的正值表示逆时针方向,负值表示顺时针方向。零度位于3点钟位置。
qpainter-arc1
rectangle = QRectF(10.0,20.0,80.0,60.0)
startAngle = 30 * 16
spanAngle = 120 * 16
painter = QPainter(self)
painter.drawArc(rectangle,startAngle,spanAngle)
drawArc(x:int,y:int,w:int,h:int,a:int,alen:int)这是一个重载函数。
绘制由矩形定义的弧,该矩形从(x,y)开始,具有指定的宽度和高度,以及给定的startAngle和spanAngle。
drawChord(arg__1:PySide6.QtCore.QRect,a:int,alen:int)这是一个重载函数。
绘制由给定矩形、startAngle和spanAngle定义的弦。
drawChord(:PySide6.QtCore.QRect,a:int,alen:int)绘制由给定矩形、startAngle和spanAngle定义的弦。和弦中充满了当前的笔刷()。
startAngle和spanAngle必须指定为1/16度,即一个完整的圆等于5760(16*360)。角度的正值表示逆时针方向,负值表示顺时针方向。零度位于3点钟位置。
qpainter-chord1
rectangle = QRectF(10.0,20.0,80.0,60.0)
startAngle = 30 * 16
spanAngle = 120 * 16
painter = QPainter(self)
painter.drawChord(rect,startAngle,spanAngle)
drawChord(x:int,y:int,w:int,h:int,a:int,alen:int)这是一个重载函数。
绘制由矩形定义的弦,该矩形从(x,y)开始,具有指定的宽度和高度,以及给定的startAngle和spanAngle。
drawConvexPolygon(arg__1)
drawConvexPolygon(polygon:PySide6.QtGui.QPolygonF)这是一个重载函数。
使用当前画笔绘制由多边形定义的凸多边形。
drawConvexPolygon(polygon:PySide6.QtGui.QPolygon)这是一个重载函数。
使用当前画笔绘制由多边形定义的凸多边形。
drawConvexPolygon(arg__1)
drawEllipse(center:PySide6.QtCore.QPointF,rx:float,ry:float)这是一个重载函数。
绘制位于中心的椭圆,半径为rx和ry。
drawEllipse(r:PySide6.QtCore.QRect)这是一个重载函数。
绘制由给定矩形定义的椭圆。
drawEllipse(r:PySide6.QtCore.QRectF)绘制由给定矩形定义的椭圆。
填充椭圆的大小为矩形。size()。描边椭圆的大小为矩形。size()加上笔的宽度。
qpainter-ellipse1

rectangle = QRectF(10.0,20.0,80.0,60.0)
painter = QPainter(self)
painter.drawEllipse(rectangle)
drawEllipse(x:int,y:int,w:int,h:int)这是一个重载函数。
绘制由矩形定义的椭圆,该矩形从(x,y)开始,具有给定的宽度和高度。
drawEllipse(center:PySide6.QtCore.QPoint,rx:int,ry:int)这是一个重载函数。
绘制位于中心的椭圆,半径为rx和ry。
drawGlyphRun(position:ySide6.QtCore.QPointF,glyphRun:PySide6.QtGui.QGlyphRun)在位置处绘制由字形表示的字形。该位置为字形字符串提供基线的边缘。字形将从字形上选择的字体中检索,并以字形中的位置给定的偏移量检索。
drawImage(r:PySide6.QtCore.QRect,image:PySide6.QtGui.QImage)这是一个重载函数。
将给定的图像绘制到给定的矩形中。
drawImage(x:int,:inty,image:PySide6.QtGui.QImage[,sx: int=0[,sy: int=0 [,sw: int=-1[,sh: int=-1[,flags: ImageConversionFlags = Qt.AutoColor]]]]])这是一个重载函数。
通过将图像的一部分复制到绘制设备中,在(x,y)处绘制图像。
(x,y)指定要绘制到的绘制设备中的左上角点。(sx,sy)指定要绘制的图像中的左上角点。默认值为(0,0)。
(sw,sh)指定要绘制的图像的大小。默认情况下,(0,0)(和负数)表示一直到图像的右下角。
drawImage(targetRect:PySide6.QtCore.QRectF,image:PySide6.QtGui.QImage,sourceRect: PySide6.QtCore.QRectF[,flags:ImageConversionFlags=Qt.AutoColor])将给定图像的矩形部分源绘制到绘制设备中的目标矩形中。
如果图像和矩形大小不一致,则缩放图像以适应矩形。
请参阅绘制像素图和图像的高分辨率版本,了解QImage::devicePixelRatio()对其的影响。
如果需要修改图像以适应较低分辨率的结果(例如,从32位转换为8位),请使用标志指定您希望如何进行此操作。
target = QRectF(10.0,20.0,80.0,60.0)
source = QRectF(0.0,0.0,70.0,40.0)
image = QImage(“:/images/myImage.png”)
painter = QPainter(self)
painter.drawImage(target,image,source)
drawImage(r:PySide6.QtCore.QRectF,image: PySide6.QtGui.QImage)这是一个重载函数。
将给定的图像绘制到给定的矩形中。
如果图像和矩形大小不一致,则缩放图像以适应矩形。
drawImage(targetRect:PySide6.QtCore.QRectF,image:PySide6.QtGui.QImage,sourceRect: PySide6.QtCore.QRectF[,flags:ImageConversionFlags=Qt.AutoColor])这是一个重载函数。
将给定图像的矩形部分源绘制到绘制设备中的目标矩形中。
如果图像和矩形大小不一致,则缩放图像以适应矩形。
drawImage(p:PySide6.QtCore.QPointF,image:PySide6.QtGui.QImage,sr: PySide6.QtCore.QPointF[,flags:ImageConversionFlags=Qt.AutoColor])这是一个重载函数。
绘制给定图像的矩形部分源,其原点位于给定点。
drawImage(p:PySide6.QtCore.QPointF,image:PySide6.QtGui.QImage)这是一个重载函数。
在给定的点绘制给定的图像。
drawImage(p:PySide6.QtCore.QPoint,image:PySide6.QtGui.QImage,sr: PySide6.QtCore.QRect[,flags:ImageConversionFlags=Qt.AutoColor])这是一个重载函数。
绘制给定图像的矩形部分源,其原点位于给定点。
drawImage(p:PySide6.QtCore.QPoint,image:PySide6.QtGui.QImage)这是一个重载函数。
在给定的点绘制给定的图像。
drawLine(line:PySide6.QtCore.QLine)这是一个重载函数。
绘制由线定义的线。
drawLine(line:PySide6.QtCore.QLineF)绘制由线定义的线。
qpainter-line1
line = QLineF(10.0,80.0,90.0,20.0)
QPainter(self)
painter.drawLine(line)
drawLine(p1:PySide6.QtCore.QPoint,p2:PySide6.QtCore.QPoint)这是一个重载函数。
绘制一条从p1到p2的线。
drawLine(p1:PySide6.QtCore.QPointF,p2:PySide6.QtCore.QPointF)这是一个重载函数。
绘制一条从p1到p2的线。
drawLine(x1:int,y1:int,x2:int,y2:int)这是一个重载函数。
绘制一条从(x1,y1)到(x2,y2)的线。
drawLines(pointPairs:list[point])这是一个重载函数。
使用当前笔为矢量点Pairs中的每对点绘制一条线。
drawLines(pointPairs:list[pointF])这是一个重载函数。
使用当前笔为矢量点Pairs中的每对点绘制一条线。如果数组中有奇数个点,则会忽略最后一个点。
drawLines(lines:PySide6.QtCore.QLineF,lineCount:int)绘制第一行使用当前笔计算数组行中的行数。
drawLines(lines)这是一个重载函数。
使用当前画笔绘制由列表线定义的一组线。
drawPath(path:PySide6.QtGui.QPainterPath)使用当前笔绘制轮廓,使用当前画笔填充指定的绘制器路径。
qpainter-path1
path = QPainterPath()
path.moveTo(20,80)
path.lineTo(20,30)
path.cubicTo(80,0,50,50,80,80)
painter = QPainter(self)
painter.drawPath(path)
drawPicture(p:PySide6.QtCore.QPoint,picture:PySide6.QtGui.QPicture)这是一个重载函数。
在给定的时间点重播给定的图片。
drawPicture(p:PySide6.QtCore.QPointF,picture:PySide6.QtGui.QPicture)在给定的时间点重播给定的图片。
QPicture类是一种绘制设备,用于记录和回放QPainter命令。图片以独立于平台的格式将绘制器命令串行化到IO设备。所有可以绘制在小部件或像素图上的东西也可以存储在图片中。
当使用point=QPointF(0,0)调用时,此函数的作用与play()完全相同。
画家的状态通过这个功能得以保存。
picture = QPicture()
point = QPointF(10.0,20.0)
picture.load(“drawing.pic”)
painter = QPainter(self)
painter.drawPicture(0,0,picture)
drawPicture(x:int,y:int,picture:PySide6.QtGui.QPicture)这是一个重载函数。
在点(x,y)处绘制给定的图片。
drawPie(arg__1:PySide6.QtCore.QRect,a:int,alen:int)绘制由给定矩形、startAngle和spanAngle定义的饼图。
drawPie(rect:PySide6.QtCore.QRectF,a:int,alen:int)绘制由给定矩形、startAngle和spanAngle定义的饼图。
馅饼中充满了当前的笔刷()。
startAngle和spanAngle必须指定为1/16度,即一个完整的圆等于5760(16*360)。角度的正值表示逆时针方向,负值表示顺时针方向。零度位于3点钟位置。
rectangle = QRectF(10.0,20.0,80.0,60.0)
startAngle = 30 * 16
spanAngle = 120 * 16
painter = QPainter(self)
painter.drawPie(rectangle,startAngle,spanAngle)
drawPie(x:int,y:int,w:int,h:int,a:int,alen:int)这是一个重载函数。
绘制由矩形定义的饼图,该矩形从(x,y)开始,具有指定的宽度和高度,以及给定的startAngle和spanAngle。
drawPixmap(p:PySide6.QtCore.QPointF,pm:PySide6.QtGui.QPixmap,sr:PySide6.QtCore.QRectF)这是一个重载函数。
绘制给定像素图的矩形部分源,其原点位于给定点。
drawPixmap(x:int,y:int,w:int,h:int,pm:PySide6.QtGui.QPixmap,sx:int,sy:int,sw:int,sh:int)这是一个重载函数。
在点(x,y)处,以给定像素图的原点(sx,sy)、宽度sw和高度sh绘制矩形部分,宽度w,高度h。如果sw或sh等于零,则使用像素图的宽度/高度,并通过偏移量sx/sy进行调整;
drawPixmap(x:int,y:int,w:int,h:int,pm:PySide6.QtGui.QPixmap)这是一个重载函数。
将像素图绘制到具有给定宽度和高度的位置(x,y)的矩形中。
drawPixmap(x:int,y:int,pm:PySide6.QtGui.QPixmap,sx:int,sy:int,sw:int,sh:int)这是一个重载函数。
通过将给定像素图的一部分复制到绘制设备中,在(x,y)处绘制像素图。
(x,y)指定要绘制到的绘制设备中的左上角点。(sx,sy)指定要绘制的像素图中的左上角点。默认值为(0,0)。
(sw,sh)指定要绘制的像素图的大小。默认值(0,0)(和负数)表示一直到像素图的右下角。
drawPixmap(x:int,y:int,pm:PySide6.QtGui.QPixmap)这是一个重载函数。
在位置(x,y)绘制给定的像素图。
drawPixmap(targetRect:PySide6.QtCore.QRectF,pixmap:PySide6.QtGui.QPixmap,sourceRect:PySide6.QtCore.QRectF)将给定像素图的矩形部分源绘制到绘制设备中的给定目标中。
如果像素图和矩形大小不一致,则缩放像素图以适应矩形。
请参阅绘制像素图和图像的高分辨率版本,了解设备PixelRatio()对其的影响。
target = QRectF(10.0,20.0,80.0,60.0)
source = QRectF(0.0,0.0,70.0,40.0)
pixmap = QPixmap(“:myPixmap.png”)
QPainter(self)
painter.drawPixmap(target,pixmap,source)
如果像素图是一个QBitmap,它是用笔颜色"设置"的位绘制的。如果backgroundMode为OpaqueMode,则使用背景笔刷的颜色绘制"未设置"位;如果backgroundMode为TransparentMode,则"未设置"位是透明的。不支持使用渐变色或纹理色绘制位图。
drawPixmap(targetRect:PySide6.QtCore.QRect,pixmap:PySide6.QtGui.QPixmap,sourceRect:PySide6.QtCore.QRect)这是一个重载函数。
将给定像素图的矩形部分源绘制到绘制设备中的给定目标中。
如果像素图和矩形大小不一致,则缩放像素图以适应矩形。
drawPixmap(r:PySide6.QtCore.QRect,pm:PySide6.QtGui.QPixmap)这是一个重载函数。
将给定的像素图绘制到给定的矩形中。如果像素图和矩形大小不一致,则缩放像素图以适应矩形。
drawPixmap(p:PySide6.QtCore.QPointF,pm:PySide6.QtGui.QPixmap)这是一个重载函数。
绘制给定的像素图,其原点位于给定的点。
drawPixmap(p:PySide6.QtCore.QPoint,pm:PySide6.QtGui.QPixmap,sr:PySide6.QtCore.QRect)这是一个重载函数。
绘制给定像素图的矩形部分源,其原点位于给定点。
drawPixmap(p:PySide6.QtCore.QPoint,pm:PySide6.QtGui.QPixmap)这是一个重载函数。
绘制给定的像素图,其原点位于给定的点。
drawPixmapFragments(fragments:PySide6.QtGui.QPainter.PixmapFragment,fragmentCount: int,pixmap:PySide6.QtGui.QPixmap[,hints:PixmapFragmentHints=QPainter.PixmapFragmentHints()])此功能用于在具有不同比例、旋转和不透明度的多个位置绘制像素图或像素图的子矩形。fragments是fragmentCount元素的数组,指定用于绘制每个像素图片段的参数。hints参数可用于传入图形提示。
此函数可能比多次调用drawPixmap()更快,因为后端可以优化状态更改。
drawPoint(x:int,y:int)这是一个重载函数。
在位置(x,y)处绘制一个点。
drawPoint(p:PySide6.QtCore.QPoint)这是一个重载函数。
使用当前笔的颜色在给定位置绘制一个点。
drawPoint(pt:PySide6.QtCore.QPointF)使用当前笔的颜色在给定位置绘制一个点。
drawPoints(arg__1)
drawPoints(arg__1)
drawPoints(points:PySide6.QtCore.QPointF,pointCount:int)绘制第一个点使用当前笔的颜色在数组点中计数点。
drawPoints(points:PySide6.QtGui.QPolygon)这是一个重载函数。
在矢量点中绘制点。
drawPoints(points:PySide6.QtGui.QPolygonF)这是一个重载函数。
在矢量点中绘制点。
drawPointsNp(x:PyArrayObject,y:PyArrayObject)绘制由两个大小相等的一维numpy数组指定的点,这两个数组分别表示x、y值。
drawPolygon(arg__1,arg__2)
drawPolygon(arg__1,arg__2)
drawPolygon(polygon:PySide6.QtGui.QPolygon [,fillRule:PySide6.QtCore.Qt.FillRule=Qt.OddEvenFill])这是一个重载函数。
使用填充规则fillRule绘制由给定点定义的多边形。
drawPolygon(polygon:PySide6.QtGui.QPolygonF [,fillRule:PySide6.QtCore.Qt.FillRule=Qt.OddEvenFill])这是一个重载函数。
使用填充规则fillRule绘制由给定点定义的多边形。
drawPolyline(arg__1)
drawPolyline(polyline:PySide6.QtGui.QPolygonF)这是一个重载函数。
使用当前笔绘制由给定点定义的多段线。
drawPolyline(polygon:PySide6.QtGui.QPolygon)这是一个重载函数。
使用当前笔绘制由给定点定义的多段线。
drawPolyline(arg__1)
drawRect(rect:PySide6.QtCore.QRect)这是一个重载函数。
使用当前画笔绘制当前矩形。
drawRect(rect:PySide6.QtCore.QRectF)使用当前画笔绘制当前矩形。
填充矩形的大小为矩形。size()。描边矩形的大小为矩形。size()加上笔的宽度。
qpainter-rectangle1
rectangle = QRectF(10.0,20.0,80.0,60.0)
painter = QPainter(self)
painter.drawRect(rectangle)
drawRect(x1:int,y1:int,w:int,h:int)这是一个重载函数。
绘制一个矩形,左上角位于(x,y)处,具有给定的宽度和高度。
drawRects(rectangles:PySide6.QtCore.QRect)这是一个重载函数。
使用当前画笔绘制给定的矩形。
drawRects(rectangles:PySide6.QtCore.QRectF)这是一个重载函数。
使用当前画笔绘制给定的矩形。
drawRects(rects:PySide6.QtCore.QRectF,rectCount:int)使用当前画笔绘制给定矩形的第一个rectCount。
drawRoundedRect(rect:PySide6.QtCore.QRect,xRadius:float,yRadius:float [,mode:PySide6.Qt3DRender.Qt3DRender.QPointSize.SizeMode=Qt.AbsoluteSize])这是一个重载函数。
绘制带有圆角的给定矩形矩形。
drawRoundedRect(x:int,y:int,w:int,h:int,xRadius:float,yRadius:float [,mode:PySide6.Qt3DRender.Qt3DRender.QPointSize.SizeMode=Qt.AbsoluteSize])这是一个重载函数。
绘制带有圆角的给定矩形x、y、w、h。
drawRoundedRect(rect:PySide6.QtCore.QRectF,xRadius:float,yRadius:float[,mode:PySide6.Qt3DRender.Qt3DRender.QPointSize.SizeMode=Qt.AbsoluteSize])绘制带有圆角的给定矩形矩形。
xRadius和yRadius参数指定椭圆的半径,椭圆定义圆角矩形的角。当模式为RelativeSize时,xRadius和yRadius分别以矩形宽度和高度的一半的百分比指定,并且应该在0.0到100.0的范围内。
填充矩形的大小为rect。size()。描边矩形的大小为rect。size()加上笔的宽度。
rectangle = QRectF(10.0,20.0,80.0,60.0)
painter = QPainter(self)
painter.drawRoundedRect(rectangle,20.0,15.0)
drawStaticText(topLeftPosition:PySide6.QtCore.QPoint,staticText:PySide6.QtGui.QStaticText)这是一个重载函数。
在顶部LeftPosition处绘制静态文本。
drawStaticText(left:int,top:int,staticText:PySide6.QtGui.QStaticText)这是一个重载函数。
在左侧和顶部的坐标处绘制静态文本。
drawStaticText(topLeftPosition:PySide6.QtCore.QPointF,staticText:PySide6.QtGui.QStaticText)在给定的topLeftPosition处绘制给定的staticText。
文本将使用画家设置的字体和转换进行绘制。如果绘制器上设置的字体和/或转换与用于初始化QStaticText布局的字体和(或)转换不同,则必须重新计算布局。使用prepare()初始化staticText,使其具有稍后绘制的字体和转换。
如果topLeftPosition与staticText初始化时或上次绘制时不同,那么在将文本转换到新位置时会有一些开销。
如果绘制者的转换不是仿射的,那么将使用对drawText()的常规调用绘制staticText,从而失去任何性能改进的可能性。
y位置用作字体的顶部。
drawText(p:PySide6.QtCore.QPoint,s:str)这是一个重载函数。
以当前定义的文本方向绘制给定的文本,从给定的位置开始。
默认情况下,QPainter绘制抗锯齿文本。y位置用作字体的基线。
drawText(p:PySide6.QtCore.QPointF,s:str)以当前定义的文本方向绘制给定的文本,从给定的位置开始。
此函数不处理换行符(\n),因为它不能将文本分成多行,也不能显示换行符。如果您想用换行符绘制多行文本,或者如果您想将文本换行,请使用QPainter::drawText()重载,该重载采用矩形。
默认情况下,QPainter绘制抗锯齿文本。
y位置用作字体的基线。
drawText(r:PySide6.QtCore.QRect,flags:int,text:str)这是一个重载函数。
根据指定的标志在提供的矩形内绘制给定的文本。
boundingRect(如果不是null)被设置为包围整个文本的边框应该是什么。例如,在下图中,虚线表示函数计算的边界Rect,虚线表示矩形:
qpainter-text-bounds1
painter = QPainter(self)
font = painter.font()
font.setPixelSize(48)
painter.setFont(font)
rectangle = QRect(0,0,100,50)
boundingRect = QRect()
painter.drawText(rectangle,0,tr(“Hello”),boundingRect)
pen = painter.pen()
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawRect(boundingRect.adjusted(0,0,-pen.width(),-pen.width()))
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawRect(rectangle.adjusted(0,0,-pen.width(),-pen.width()))
默认情况下,QPainter绘制抗锯齿文本。
drawText(r:PySide6.QtCore.QRectF,text:str[,o:PySide6.QtGui.QTextOption=QTextOption()])这是一个重载函数。
在使用选项指定的矩形中绘制给定的文本,以控制其位置、方向和方向。选项中给定的选项将覆盖在QPainter对象本身上设置的选项。
默认情况下,QPainter绘制抗锯齿文本。矩形的y坐标用作字体的顶部。
drawText(r:PySide6.QtCore.QRectF,flags:int,text:str)这是一个重载函数。
在提供的矩形内绘制给定的文本。矩形与对齐标志一起定义文本的定位。
qpainter-text1
painter = QPainter(self)
painter.drawText(rect,Qt.AlignCenter,tr(“Qt\nProject”))
boundingRect(如果不是null)被设置为包围整个文本的边框应该是什么。例如,在下图中,虚线表示函数计算的边界Rect,虚线表示矩形:
qpainter-text-bounds2
painter = QPainter(self)
font = painter.font()
font.setPixelSize(48)
painter.setFont(font)
rectangle = QRect(0,0,100,50)
boundingRect = QRect()
painter.drawText(rectangle,0,tr(“Hello”),boundingRect)
pen = painter.pen()
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawRect(boundingRect.adjusted(0,0,-pen.width(),-pen.width()))
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawRect(rectangle.adjusted(0,0,-pen.width(),-pen.width()))
flags参数是以下标志的按位"或":
AlignLeft
AlignRight
AlignHCenter
AlignJustify
AlignTop
AlignBottom
AlignVCenter
AlignCenter
TextDontClip
TextSingleLine
TextExpandTabs
TextShowMnemonic
TextWordWrap
TextIncludeTrailingSpaces
默认情况下,QPainter绘制抗锯齿文本。
drawText(x:int,y:int,s:str)这是一个重载函数。
使用绘制者当前定义的文本方向,在位置(x,y)绘制给定的文本。
默认情况下,QPainter绘制抗锯齿文本。
drawText(x:int,y:int,w:int,h:int,flags:int,text:str)这是一个重载函数。
在具有原点(x,y)、宽度和高度的矩形内绘制给定的文本。
boundingRect(如果不是null)被设置为包围整个文本的边框应该是什么。例如,在下图中,虚线表示函数计算的边界Rect,虚线表示由x、y、宽度和高度定义的矩形:
painter = QPainter(self)
font = painter.font()
font.setPixelSize(48)
painter.setFont(font)
rectangle = QRect(0,0,100,50)
boundingRect = QRect()
painter.drawText(rectangle,0,tr(“Hello”),boundingRect)
pen = painter.pen()
pen.setStyle(Qt.DotLine)
painter.setPen(pen)
painter.drawRect(boundingRect.adjusted(0,0,-pen.width(),-pen.width()))
pen.setStyle(Qt.DashLine)
painter.setPen(pen)
painter.drawRect(rectangle.adjusted(0,0,-pen.width(),-pen.width()))
flags参数是以下标志的按位"或":
AlignLeft
AlignRight
AlignHCenter
AlignJustify
AlignTop
AlignBottom
AlignVCenter
AlignCenter
TextSingleLine
TextExpandTabs
TextShowMnemonic
TextWordWrap
默认情况下,QPainter绘制抗锯齿文本。
drawTextItem(p:PySide6.QtCore.QPoint,ti:PySide6.QtGui.QTextItem)
drawTextItem(p:PySide6.QtCore.QPointF,ti:PySide6.QtGui.QTextItem)
drawTextItem(x,y,ti)
drawTiledPixmap(arg__1:PySide6.QtCore.QRect,arg__2:PySide6.QtGui.QPixmap[,pos:PySide6.QtCore.QPoint=QPoint()])这是一个重载函数。
在给定的矩形内绘制一个平铺的像素图,其原点位于给定的位置。
drawTiledPixmap(rect:PySide6.QtCore.QRectF,pm:PySide6.QtGui.QPixmap[,offset=QPointF()])在给定的矩形内绘制一个平铺的像素图,其原点位于给定的位置。
调用drawTiledPixmap()类似于多次调用drawPixmap(。
与普通dpi显示器相比,drawTiledPixmap()将在高dpi显示器(devicePixelRatio>1)上产生相同的视觉平铺模式。在像素图上设置devicePixelRatio以控制平铺大小。例如,将其设置为平铺宽度和高度的二分之一(在1x和2x显示器上),并在2x显示器中产生高分辨率输出。
位置偏移始终在画家坐标系中,与显示设备PixelRatio无关。
drawTiledPixmap(x:int,y:int,w:int,h:int,arg__5:PySide6.QtGui.QPixmap[,sx:int=0[,sy:int=0]])这是一个重载函数。
在指定的矩形中绘制平铺的像素图。
(x,y)指定要绘制到的绘制设备中的左上角点;具有给定的宽度和高度。(sx,sy)指定要绘制的像素图中的左上角点;此值默认为(0,0)。
end()->bool结束绘画。绘画时使用的任何资源都将被释放。通常不需要调用它,因为它是由析构函数调用的。
如果绘制者不再处于活动状态,则返回true;否则返回false。
endNativePainting()在手动发出本机绘制命令后恢复绘制程序。允许绘制器在调用任何其他绘制器命令之前恢复其所依赖的任何本机状态。
eraseRect(arg__1:PySide6.QtCore.QRect)这是一个重载函数。
擦除给定矩形内的区域。
eraseRect(arg__1:PySide6.QtCore.QRectF)擦除给定矩形内的区域。相当于呼叫
fillRect(rectangle,background())
eraseRect(x:int,y:int,w:int,h:int)这是一个重载函数。
擦除矩形内部从(x,y)开始并具有给定宽度和高度的区域。
fillPath(path:PySide6.QtGui.QPainterPath,brush:PySide6.QtGui.QBrush)使用给定的笔刷填充给定的路径。未绘制轮廓。
或者,您可以指定一个QColor而不是QBrush;QBrush构造函数(采用QColor参数)将自动创建一个实心图案画笔。
fillRect(x:int,y:int,w:int,h:int,color:PySide6.QtGui.QColor)这是一个重载函数。
使用给定的颜色,以给定的宽度和高度填充从(x,y)开始的矩形。
fillRect(x:int,y:int,w:int,h:int,arg__5:PySide6.QtGui.QBrush)这是一个重载函数。
使用给定的笔刷,以给定的宽度和高度填充从(x,y)开始的矩形。
fillRect(r:PySide6.QtCore.QRect,preset:PySide6.QtGui.QGradient.Preset)这是一个重载函数。
使用指定的渐变预设填充给定的矩形。
fillRect(x:int,y:int,w:int,h:int,c:PySide6.QtCore.Qt.GlobalColor)这是一个重载函数。
使用给定的颜色,以给定的宽度和高度填充从(x,y)开始的矩形。
fillRect(x:int,y:int,w:int,h:int,style:PySide6.QtCore.Qt.BrushStyle)这是一个重载函数。
使用指定的笔刷样式,以给定的宽度和高度填充从(x,y)开始的矩形。
fillRect(x:int,y:int,w:int,h:int,preset:PySide6.QtGui.QGradient.Preset)这是一个重载函数。
使用给定的渐变预设,以给定的宽度和高度填充从(x,y)开始的矩形。
fillRect(r:PySide6.QtCore.QRectF,c:PySide6.QtCore.Qt.GlobalColor)这是一个重载函数。
用指定的颜色填充给定的矩形。
fillRect(r:PySide6.QtCore.QRectF,style:PySide6.QtCore.Qt.BrushStyle)这是一个重载函数。
使用指定的笔刷样式填充给定的矩形。
fillRect(arg__1:PySide6.QtCore.QRectF,color:PySide6.QtGui.QColor)这是一个重载函数。
用指定的颜色填充给定的矩形。
fillRect(arg__1:PySide6.QtCore.QRectF,arg__2:PySide6.QtGui.QBrush)使用指定的笔刷填充给定的矩形。
或者,您可以指定一个QColor而不是QBrush;QBrush构造函数(采用QColor参数)将自动创建一个实心图案画笔。
fillRect(r:PySide6.QtCore.QRect,c:PySide6.QtCore.Qt.GlobalColor)这是一个重载函数。
用指定的颜色填充给定的矩形。
fillRect(r:PySide6.QtCore.QRect,style:PySide6.QtCore.Qt.BrushStyle)这是一个重载函数。
使用指定的笔刷样式填充给定的矩形。
fillRect(arg__1:PySide6.QtCore.QRect,color: PySide6.QtGui.QColor)这是一个重载函数。
用指定的颜色填充给定的矩形。
fillRect(arg__1:PySide6.QtCore.QRect,arg__2:PySide6.QtGui.QBrush)这是一个重载函数。
使用指定的笔刷填充给定的矩形。
fillRect(r:PySide6.QtCore.QRectF,preset:PySide6.QtGui.QGradient.Preset)这是一个重载函数。
使用指定的渐变预设填充给定的矩形。
font()->PySide6.QtGui.QFont返回当前设置的用于绘制文本的字体。
fontInfo()->PySide6.QtGui.QFontInfo如果绘制器处于活动状态,则返回绘制器的字体信息。否则,返回值是未定义的。
fontMetrics()->PySide6.QtGui.QFontMetrics如果绘制器处于活动状态,则返回绘制器的字体度量。否则,返回值是未定义的。
hasClipping()->bool如果已设置剪切,则返回true;否则返回false。
isActive()->bool如果begin()已被调用,而end()尚未被调用,则返回true;否则返回false。
layoutDirection()->PySide6.QtCore.Qt.LayoutDirection返回绘制者在绘制文本时使用的布局方向。
opacity()->float返回绘制者的不透明度。默认值为1。
paintEngine()->PySide6.QtGui.QPaintEngine如果绘制器处于活动状态,则返回绘制器当前正在运行的绘制引擎;否则为0。
pen()->PySide6.QtGui.QPen返回画家当前的画笔。
renderHints()->RenderHints返回一个标志,该标志指定为此绘制器设置的渲染提示。
resetTransform()重置使用translate()、scale()、shear()、rotate()、setWorldTransform(),setViewport()和setWindow()进行的任何转换。
restore()恢复当前油漆工状态(从堆栈中弹出已保存的状态)。
rotate(a:float)顺时针旋转坐标系。给定的角度参数以度为单位。
save()保存当前绘制器状态(将状态推送到堆栈上)。save()后面必须跟一个相应的restore();end()函数会解开堆栈。
scale(sx:float,sy:float)按(sx,sy)缩放坐标系。
setBackground(bg:PySide6.QtGui.QBrush)将绘制者的背景笔刷设置为给定的笔刷。
背景画笔是在绘制不透明文本、点画线和位图时填充的画笔。背景笔刷在透明背景模式(默认模式)下没有效果。
setBackgroundMode(mode:PySide6.QtCore.Qt.BGMode)将画家的背景模式设置为给定模式
TransparentMode(默认模式)在不设置背景像素的情况下绘制点划线和文本。不透明模式使用当前背景色填充这些空间。
请注意,为了透明地绘制位图或像素图,必须使用setMask()。
setBrush(style:PySide6.QtCore.Qt.BrushStyle)这是一个重载函数。
将画家的画笔设置为黑色和指定的样式。
setBrush(brush:PySide6.QtGui.QBrush)将绘制者的笔刷设置为给定的笔刷。
画家的画笔定义了形状的填充方式。
setBrushOrigin(arg__1:PySide6.QtCore.QPoint)这是一个重载函数。
将笔刷的原点设置为给定位置。
setBrushOrigin(arg__1:PySide6.QtCore.QPointF)将笔刷原点设置为位置。
画笔原点指定画家画笔的(0,0)坐标。
请注意,虽然brushOrigin()对于Qt 3中的小部件采用父对象的背景是必要的,但现在已经不是这样了,因为Qt 4画家不会绘制背景,除非您通过将小部件的autoFillBackground属性设置为true来明确告诉它这样做。
setBrushOrigin(x:int,y:int)这是一个重载函数。
将笔刷的原点设置为点(x,y)。
setClipPath(path:PySide6.QtGui.QPainterPath[,op:PySide6.QtCore.Qt.ClipOperation=Qt.ReplaceClip])启用剪裁,并使用剪裁操作将绘制器的剪裁路径设置为给定路径。
请注意,剪辑路径是在逻辑(painter)坐标中指定的。
setClipRect(arg__1:PySide6.QtCore.QRect[,op:PySide6.QtCore.Qt.ClipOperation=Qt.ReplaceClip])这是一个重载函数。
启用剪裁,并使用给定的剪裁操作将剪裁区域设置为给定的矩形。
setClipRect(x:int,y:int,w:int,h:int[,op:PySide6.QtCore.Qt.ClipOperation=Qt.ReplaceClip])启用剪裁,并将剪裁区域设置为以给定宽度和高度从(x,y)开始的矩形。
setClipRect(arg__1:PySide6.QtCore.QRectF[,op:PySide6.QtCore.Qt.ClipOperation=Qt.ReplaceClip])启用剪裁,并使用给定的剪裁操作将剪裁区域设置为给定的矩形。默认操作是替换当前剪辑矩形。
请注意,剪辑矩形是在逻辑(painter)坐标中指定的。
setClipRegion(arg__1:PySide6.QtGui.QRegion[,op:PySide6.QtCore.Qt.ClipOperation=Qt.ReplaceClip])使用指定的剪辑操作将剪辑区域设置为给定区域。默认的剪辑操作是替换当前的剪辑区域。
请注意,剪辑区域是以逻辑坐标给出的。
setClipping(enable:bool)如果enable为true,则启用剪裁;如果enable是false,则禁用剪裁。
setCompositionMode(mode:PySide6.QtGui.QPainter.CompositionMode)将合成模式设置为给定模式。
setFont(f:PySide6.QtGui.QFont)将绘制者的字体设置为给定的字体。
此字体用于后续的drawText()函数。文本颜色与笔的颜色相同。
如果您设置的字体不可用,Qt会找到一个非常匹配的字体。font()将返回您使用setFont()设置的内容,fontInfo()返回实际使用的字体(可能相同)。
setLayoutDirection(direction:PySide6.QtCore.Qt.LayoutDirection)将绘制者在绘制文本时使用的布局方向设置为指定方向。
默认为LayoutDirectionAuto,它将根据绘制的文本隐式确定方向。
setOpacity(opacity:float)将绘制器的不透明度设置为不透明度。该值应在0.0到1.0的范围内,其中0.0是完全透明的,1.0是完全不透明的。
在绘制器上设置的不透明度将单独应用于所有绘制操作。
setPen(pen:PySide6.QtGui.QPen)将画家的笔设置为给定的笔。
画笔定义了如何绘制线条和轮廓,还定义了文本的颜色。
setPen(color:PySide6.QtGui.QColor)这是一个重载函数。
将画家的笔设置为具有样式SolidLine、宽度1和指定颜色。
setPen(style:PySide6.QtCore.Qt.PenStyle)这是一个重载函数。
将画家的笔设置为具有给定的样式、宽度1和黑色。
setRenderHint(hint:PySide6.QtGui.QPainter.RenderHint[,on=true])如果启用为true,则在绘制器上设置给定的渲染提示;否则将清除渲染提示。
setRenderHints(hints:PySide6.QtGui.QPainter.RenderHint[,on=true])如果启用为true,则在绘制器上设置给定的渲染提示;否则将清除渲染提示。
setTransform(transform:PySide6.QtGui.QTransform[,combine:bool=false])设置世界变换矩阵。如果combine为true,则指定的变换将与当前矩阵相组合;否则它将替换当前矩阵。
setViewTransformEnabled(enable:bool)如果enable为true,则启用视图转换;如果enable是false,则禁用视图转换。
setViewport(viewport:PySide6.QtCore.QRect)将绘制者的视口矩形设置为给定的矩形,并启用视图变换。
视口矩形是视图变换的一部分。视口指定设备坐标系。它的姊妹窗口()指定了逻辑坐标系。
默认视口矩形与设备的矩形相同。
setViewport(x:int,y:int,w:int,h:int)这是一个重载函数。
将绘制者的视口矩形设置为从(x,y)开始并具有给定宽度和高度的矩形。
setWindow(window:PySide6.QtCore.QRect)将绘制器的窗口设置为给定的矩形,并启用视图转换。
窗口矩形是视图转换的一部分。该窗口指定逻辑坐标系。它的姊妹节点viewport()指定设备的坐标系。
默认的窗口矩形与设备的矩形相同。
setWindow(x:int,y:int,w:int,h:int)这是一个重载函数。
将绘制器的窗口设置为从(x,y)开始的矩形以及给定的宽度和高度。
setWorldMatrixEnabled(enabled:bool)如果enable为true,则启用转换;如果enable是false,则禁用转换。世界变换矩阵不变。
setWorldTransform(matrix:PySide6.QtGui.QTransform[,combine:bool=false])设置世界变换矩阵。如果组合为true,则指定的矩阵将与当前矩阵组合;否则它将替换当前矩阵。
shear(sh:float,sv:float)将坐标系剪切(sh,sv)。
strokePath(path:PySide6.QtGui.QPainterPath,pen:PySide6.QtGui.QPen)使用笔指定的笔绘制路径的轮廓(笔划)
testRenderHint(hint:PySide6.QtGui.QPainter.RenderHint)->bool如果设置了提示,则返回true;否则返回false。
transform()->PySide6.QtGui.QTransformworldTransform()的别名。返回世界变换矩阵。
translate(offset:PySide6.QtCore.QPoint)这是一个重载函数。
按给定的偏移量平移坐标系。
translate(offset:PySide6.QtCore.QPointF)将坐标系平移给定的偏移量;即,将给定的偏移量添加到点。
translate(dx:float,dy:float)这是一个重载函数。
通过矢量(dx,dy)平移坐标系。
viewTransformEnabled()->bool如果启用了视图转换,则返回true;否则返回false。
viewport()->PySide6.QtCore.QRect返回视口矩形。
window()->PySide6.QtCore.QRect返回窗口矩形。
worldMatrixEnabled()->bool如果启用了世界转换,则返回true;否则返回false。
worldTransform()->PySide6.QtGui.QTransform返回世界变换矩阵。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Graphics View 是 Qt 框架中用于绘图的一个模块。下面是一个使用 Graphics View 绘制简单图形的示例程序。 首先,需要在程序中引入 QGraphicsView、QGraphicsScene 和 QGraphicsItem 这三个的头文件。 然后,在程序的主函数或其他适当的位置,创建一个 QGraphicsView 实例,并设置场景的大小和背景颜色。例如: QGraphicsView *view = new QGraphicsView(); view->setSceneRect(0, 0, 800, 600); view->setBackgroundBrush(Qt::white); 接着,创建一个 QGraphicsScene 实例,并设置场景的大小和背景颜色。例如: QGraphicsScene *scene = new QGraphicsScene(); scene->setSceneRect(0, 0, 800, 600); scene->setBackgroundBrush(Qt::white); 然后,创建一个 QGraphicsItem 的子,并实现它的绘制函数 paint()。在 paint() 函数中,使用 QPainter 绘制所需的图形,如圆形、矩形等。例如: class MyGraphicsItem : public QGraphicsItem { public: MyGraphicsItem() {} QRectF boundingRect() const override { return QRectF(-50, -50, 100, 100); } void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override { painter->setBrush(Qt::blue); painter->drawEllipse(-50, -50, 100, 100); } }; 最后,将创建的 MyGraphicsItem 添加到场景中,并将场景设置给 QGraphicsView 实例。例如: MyGraphicsItem *item = new MyGraphicsItem(); scene->addItem(item); view->setScene(scene); view->show(); 整个程序的执行过程是,创建一个 QGraphicsView 实例,并设置它的场景为一个 QGraphicsScene 实例。然后,在 QGraphicsScene 中创建一个 QGraphicsItem 的子,实现绘制函数 paint()。最后,将这个 QGraphicsItem 添加到 QGraphicsScene 中,从而在 QGraphicsView 中显示出来。 这个示例只是 Graphics View 的基础用法,真实的 Graphics View 应用程序会更加复杂,可以通过修改 MyGraphicsItem 的 paint() 函数来实现更多的绘图操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

士别三日,当挖目相待

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

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

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

打赏作者

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

抵扣说明:

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

余额充值