"QPainter::begin: Paint device returned engine == 0, type: 1"

"QPainter::begin: Paint device returned engine == 0, type: 1"

我有以下测试代码:

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

为什么?

如果你想在一个widget里面画东西,你需要使用widget的paintEvent来定义一个QPainter。此方法允许为即时绘画声明 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

Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent().