3

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?

Lolecule
  • 33
  • 2
  • 5

1 Answers1

4

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()
mandel
  • 2,921
  • 3
  • 23
  • 27
  • Thanks very much, I ended up using a bit of a hack to work around it due to time constraints, but good to know for future projects! – Lolecule Mar 31 '12 at 01:15