Question

I've subclassed the QPlainTextEdit class and have tried to override the paintEvent function so that I can draw a line number area onto it.

def paintEvent(self, e):
    super(CodeEditor, self).paintEvent(e)
    qp = QtGui.QPainter()
    qp.begin(self)
    self.drawLineNoArea(qp)
    qp.end()

When the program runs I get this output:

QPainter::begin: Widget painting can only begin as a result of a paintEvent
QPainter::setPen: Painter not active
QPainter::end: Painter not active, aborted

My best guess is that the function hasn't been overridden properly, but I'm really not sure. Can anybody tell me where I'm going wrong?

Was it helpful?

Solution

You have to pass the viewport to the QPainter, same as with lists and trees.

def paintEvent(self, e):
    super(CodeEditor, self).paintEvent(e)
    qp = QtGui.QPainter()
    qp.begin(self.viewport())
    self.drawLineNoArea(qp)
    qp.end()
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top