Этот код для создания QPolygon в Pyqt останавливает мое приложение! Помогите? - PullRequest
2 голосов
/ 30 сентября 2010

HI all,

Следующий код:

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 ]

2 голосов
/ 30 сентября 2010

Сохраните список, которому вы передаете конструктор QPolygon, в локальной переменной. Я предполагаю, что элементы будут собирать мусор, как только вызов вернется, поэтому при рисовании многоугольника их больше нет.

points = [QPoint(30, 0), QPoint(-30, 0), QPoint(0, 200)]
needle = Qt.QPolygon(points)
0 голосов
/ 09 октября 2010

Потому что вы неправильно создаете свой 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, чтобы закрыть многоугольник.

...