当前位置:网站首页 > R语言数据分析 > 正文

Qpainterpath绘制特效图形(qpainter.begin)



引言

    图形与图像绘制支持是一个GUI框架库的核心模块之一,从Java的Graphics2D到Android的Canvas类支持到PyQT5中的QPainter类支持与图元支持,都很好的满足了GUI库的图形绘制与渲染需求。

QPainter类介绍

QPainter类是PyQT5中图形绘制类,支持圆、椭圆、矩形、圆角矩形、线段、文本、图像、多边形、弧形等常见几何形状的绘制与填充,支持颜色、旋转、状态复位、平移、错切等设置操作。所有的QWidget类都继承了paintEvent方法,绘制代码都应该在paintEvent方法中完成执行。一个典型的paintEvent方法绘制代码如下:

 

 def paintEvent(self, paintEvent): painter = QPainter(self) painter.setPen(Qt.blue) painter.setFont(QFont("Arial", 30)) painter.drawText(rect(), Qt.AlignCenter, "OpenCV学堂")

上述代码首先获取画笔,然后设置颜色与字体,最后绘制文本。通过用户创建Painter实例的方式绘制,绘制结束之后需要显式销毁,通过系统的painter绘制则无需这样,对比如下:

用户创建绘制
 def paintEvent(self, paintEvent): p = QPainter() p.begin(self) p.drawLine(...) # drawing code p.end()

 

调用系统绘制

 

 def paintEvent(self, paintEvent): p = QPainter(self) p.drawLine(...) # drawing code

所有绘制的函数支持都是draw开头,所有填充的函数都是fill开头,什么绘制与填充,请看下图:



pyqt5

 

综合代码演示

代码实现了绘制与填充不同的几何形状,支持不同颜色设置,线宽设置,风格设置等。运行结果如下图:

pyqt5

添加上显示图像功能之后如下:

pyqt5

相关自定义绘制类代码如下:

 

 1from PyQt5 import QtWidgets 2from PyQt5 import QtGui 3from PyQt5 import QtCore 4import sys 5 6 7class MyCustomCanvas(QtWidgets.QWidget): 8    def __init__(self): 9        super().__init__() 10        print("create my custom canvas") 11 12    def paintEvent(self, event): 13        painter = QtGui.QPainter(self) 14        # 设置为反锯齿 15        painter.setRenderHint(QtGui.QPainter.Antialiasing) 16 17        # 填充黑色背景 18        painter.fillRect(self.rect(), QtCore.Qt.black) 19 20        # 绘制图像 21        pic = QtGui.QPixmap("test3.png") 22        painter.drawPixmap(self.rect(), pic) 23 24        # 设置字体与颜色,绘制文本 25        pen = QtGui.QPen(QtCore.Qt.green, 5, QtCore.Qt.DashLine) 26        painter.setPen(pen) 27        font = QtGui.QFont() 28        font.setBold(True) 29        font.setPointSizeF(24) 30        painter.setFont(font) 31        painter.drawText(QtCore.QPoint(20, 50), "OpenCV学堂") 32 33        # 5表示线宽 34        pen = QtGui.QPen(QtCore.Qt.red, 5, QtCore.Qt.DashLine) 35        painter.setPen(pen) 36        painter.drawLine(50, 100, 50, 400) 37 38        # 绘制矩形 39        pen = QtGui.QPen(QtCore.Qt.yellow, 5, QtCore.Qt.DotLine) 40        painter.setPen(pen) 41        painter.drawRect(QtCore.QRect(100, 100, 200, 200)) 42        painter.fillRect(100, 100, 200, 200, QtCore.Qt.green) 43 44        # 绘制圆 45        pen = QtGui.QPen(QtCore.Qt.red, 5, QtCore.Qt.DotLine) 46        painter.setPen(pen) 47 48        # 设置为填充模式 49        painter.setBrush(QtGui.QBrush(QtCore.Qt.yellow, QtCore.Qt.SolidPattern)) 50 51        # 直接绘制 52        painter.drawEllipse(QtCore.QRect(300, 300, 150, 150)) 53 54        # 贝塞尔曲线 55        painter.setBrush(QtGui.QBrush(QtCore.Qt.red, QtCore.Qt.SolidPattern)) 56        self.drawBezierCurve(painter) 57 58    def drawBezierCurve(self, qp): 59        path = QtGui.QPainterPath() 60        path.moveTo(450, 100) 61        path.cubicTo(450, 100, 550, 200, 450, 350) 62        qp.drawPath(path)

 






审核编辑:刘清




到此这篇Qpainterpath绘制特效图形(qpainter.begin)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • docker的版本(docker最新版本是多少)2025-11-30 16:54:09
  • treeagepro2019破解版(tree world安卓破解版)2025-11-30 16:54:09
  • rmsprop和adam区别(rme adi2 dac pro 区别)2025-11-30 16:54:09
  • bigboss源没有mobilesubstrate依赖(bigboss源怎么用)2025-11-30 16:54:09
  • topcoder竞赛(topcoder比赛)2025-11-30 16:54:09
  • 甲骨文 crm(甲骨文 川)2025-11-30 16:54:09
  • raisemeup歌曲原唱视频(raisemeup歌曲歌词)2025-11-30 16:54:09
  • pdfviewer如何进行编辑(pdfxchangeviewer怎么编辑文档)2025-11-30 16:54:09
  • awork是什么(work是啥意思是什么)2025-11-30 16:54:09
  • NoneType怎么和int做运算(non-int of type str)2025-11-30 16:54:09
  • 全屏图片