我有以下测试代码:
import sys
from PySide.QtGui import *
app = QApplication(sys.argv)
widget = QWidget()
painter = QPainter(widget)
创建QPainter对象后,我收到错误消息:
QPainter::begin: Paint device returned engine == 0, type: 1
为什么?
答案 0 :(得分:5)
如果您想在窗口小部件中绘制内容,则需要使用窗口小部件的paintEvent
来定义QPainter
。此方法允许为immediat绘画声明Qpainter
,并通过它避免调用Qpainter.begin()
和Qpainter.end()
的方式。
class MyWidget(QWidget):
def __init__(self):
super().__init__()
def paintEvent(self, event):
painter = QPainter(self)
painter.drawLine(0, 0, 100, 100)
app = QApplication(sys.argv)
widget = MyWidget()
widget.show()
sys.exit(app.exec_())
http://doc.qt.io/qt-5/qpainter.html#details
警告:当paintdevice是一个小部件时,QPainter只能在paintEvent()函数或paintEvent()调用的函数中使用。