创建QPolygon的代码导致我的PyQt应用程序停止!求助!

2 投票
2 回答
5324 浏览
提问于 2025-04-16 04:47

大家好,

下面这段代码:

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应用程序崩溃了。有没有人知道为什么会这样?这段代码是我用pyuic4自动生成的ui_form.py文件的一部分。把它删掉或者注释掉就能解决问题。是的,这段代码是我自己写的,而不是编译器生成的。

非常感谢!

2 个回答

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 来决定是否闭合这个多边形。

2

把你传给 QPolygon 构造函数的列表保存在一个本地变量里。我猜当这个函数调用结束后,列表里的元素就会被垃圾回收掉,所以当你要绘制这个多边形时,它们就不见了。

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

撰写回答