3

QPlainTextEditクラスをサブクラス化し、paintEvent関数をオーバーライドして、行番号領域を描画できるようにしました。

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

プログラムを実行すると、次の出力が得られます。

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

私の推測では、関数は適切にオーバーライドされていませんが、実際にはわかりません。誰かが私がどこで間違っているのか教えてもらえますか?

4

1 に答える 1

4

リストやツリーの場合と同様に、ビューポートをQPainterに渡す必要があります。

def paintEvent(self, e):
    super(CodeEditor, self).paintEvent(e)
    qp = QtGui.QPainter()
    qp.begin(self.viewport())
    self.drawLineNoArea(qp)
    qp.end()
于 2012-02-27T16:10:05.220 に答える