首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用QPainterPath?

如何使用QPainterPath?
EN

Stack Overflow用户
提问于 2014-08-11 10:26:15
回答 2查看 7.1K关注 0票数 3

我使用pyqt来尝试创建一个显示图像和曲线的应用程序。

为了绘制贝塞尔曲线,我找到了QPainterPath类,特别是QpainterPath.cubicTo。但是,我不明白如何使用这个类。我应该在哪个部件中绘制我的曲线?

我看到了Q画家QGraphicsView/QGraphicsScene,但是我不知道如何与它们一起使用我的QPainterPath

您有QPainterPath与pyqt/pyside一起使用的例子吗?(例如,一个显示三次bezier曲线的简单窗口)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-11 11:47:51

QPainter是一个相当低级的类.对于简单的应用程序,您可以忽略它。添加一个QGraphicsView小部件并执行如下操作:

代码语言:javascript
复制
# Prepare the QGraphicsView widget
scene = QtGui.QGraphicsScene(graphicsView)
graphicsView.setScene(scene)
graphicsView.setRenderHint(QtGui.QPainter.Antialiasing)

# Draw a line
path = QtGui.QPainterPath()
path.moveTo(0, 0)
path.cubicTo(100, -20, 40, 90, 20, 20)
scene.addPath(path)
票数 6
EN

Stack Overflow用户

发布于 2014-08-11 12:39:03

您可以使用自定义小部件。绘图是在paintEvent()方法中完成的:

代码语言:javascript
复制
import sys
from PyQt4 import QtGui, QtCore

class Example(QtGui.QWidget):

def __init__(self):
    super(Example, self).__init__()

    self.initUI()

def initUI(self):      

    self.setGeometry(300, 300, 280, 170)
    self.setWindowTitle('Draw Bezier')
    self.show()

def paintEvent(self, event):


    startPoint = QtCore.QPointF(0, 0)
    controlPoint1 = QtCore.QPointF(100, 50)
    controlPoint2 = QtCore.QPointF(200, 100)
    endPoint = QtCore.QPointF(300, 300)

    cubicPath = QtGui.QPainterPath(startPoint)
    cubicPath.cubicTo(controlPoint1, controlPoint2, endPoint)


    painter = QtGui.QPainter(self)
    painter.begin(self)
    painter.drawPath(cubicPath);
    painter.end()

这将使用startPointcontrolPoint2指定的控制点在endPointcontrolPoint1之间添加一条立方Bezier曲线。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25241089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档