2012-02-09 93 views
3

我已經子類化QPlainTextEdit類並嘗試覆蓋paintEvent函數,以便我可以在其上繪製一個行號區域。使用PySide覆蓋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

您必須將視口傳遞給QPainter,與列表和樹相同。

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

非常感謝,由於時間限制,我最終使用了一點黑客來解決它,但是對於將來的項目很瞭解! – Lolecule 2012-03-31 01:15:35