这个用于在Pyqt中创建QPolygon的代码正在停止我的应用程序!救命?

时间:2010-09-30 07:02:36

标签: python windows qt pyqt pyqt4

全部,

以下代码:

self.painter = QtGui.QPainter(self)
self.painter.setRenderHint(QPainter.Antialiasing)
self.painter.translate(482,395)
self.painter.scale(300,300)
self.painter.save()
needle = Qt.QPolygon([QPoint(30, 0), QPoint(-30, 0), QPoint(0, 200)])
self.painter.setBrush(Qt.cyan)
self.painter.setPen(Qt.black)
self.painter.drawPolygon(needle)
self.painter.restore()

导致我的Pyqt应用程序崩溃。有谁知道为什么?它是我的ui_form.py文件的一部分,它由pyuic4自动吐出。删除/注释它可以解决问题。是的,我自己编写了这个而不是编译器。

非常感谢!

2 个答案:

答案 0 :(得分:2)

将传递QPolygon构造函数的列表保存在局部变量中。我猜这些元素会在调用返回时立即收集垃圾,因此当您绘制多边形时,它们不再存在。

points = [QPoint(30, 0), QPoint(-30, 0), QPoint(0, 200)]
needle = Qt.QPolygon(points)

答案 1 :(得分:0)

因为您没有正确创建QPolygon。


QPolygon ()
    QPolygon ( int size )
    QPolygon ( const QPolygon & polygon )
    QPolygon ( const QVector & points )
    QPolygon ( const QRect & rectangle, bool closed = false )

您可以使用整数,已创建的QPolygon,QVector或QRect创建多边形,也可以传递true或false以关闭多边形。