2012-02-09 9 views
3

QPlainTextEdit 클래스를 서브 클래스 화하고, paintEvent 함수를 오버라이드 (override) 해, 거기에 행 번호 영역을 묘화하려고했습니다. 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 

내 추측이 기능이 제대로 오버라이드 (override)되지 않은,하지만 난 정말 모르겠어요 것입니다. 아무도 내가 잘못 가고 있다고 말할 수 있습니까?

답변

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