我使用pyqt来尝试创建一个显示图像和曲线的应用程序。
为了绘制贝塞尔曲线,我找到了QPainterPath类,特别是QpainterPath.cubicTo。但是,我不明白如何使用这个类。我应该在哪个部件中绘制我的曲线?
我看到了Q画家和QGraphicsView/QGraphicsScene,但是我不知道如何与它们一起使用我的QPainterPath。
您有QPainterPath与pyqt/pyside一起使用的例子吗?(例如,一个显示三次bezier曲线的简单窗口)
发布于 2014-08-11 11:47:51
QPainter是一个相当低级的类.对于简单的应用程序,您可以忽略它。添加一个QGraphicsView小部件并执行如下操作:
# 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)发布于 2014-08-11 12:39:03
您可以使用自定义小部件。绘图是在paintEvent()方法中完成的:
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()这将使用startPoint和controlPoint2指定的控制点在endPoint和controlPoint1之间添加一条立方Bezier曲线。
https://stackoverflow.com/questions/25241089
复制相似问题