2017-03-06 2 views
1

enter image description hereQGraphicsItem 페인트 지연

어떤 이유 일 수 있습니까? QGraphicsView를 확대하고 QGraphicsItem을 움직이면이 이상한 결과를 얻습니다. 보기를 다시 확대/축소하거나 다른 위젯에 초점을 맞추면 업데이트됩니다. Im는 PySide를 사용합니다. 그리고 화가 기능은 다음과 같습니다.

def paint(self, painter, option, widget): 
    if self.isSelected(): 
     brush = self.highlight_brush 
     pen = self.highlight_pen 
    else: 
     brush = self.dormant_brush 
     pen = self.dormant_pen 

    painter.setBrush(brush) 
    painter.setPen(pen) 

    painter.drawRect(0, 0, 100, 100) 

왜이 기본 페인트 이벤트에도이 문제가 발생합니까? 펜이 없으면이 문제는 보이지 않습니다. 펜 너비를 늘리면이 문제가 눈에 띄게 보입니다.

답변

0

이 렌더링 공예품에 대한 실제 해결책을 모르겠습니다. 그러나 mouseMoveEvent 동안 뷰를 업데이트하면 문제가 해결되었습니다.

def mouseMoveEvent(self, event): 
    QGraphicsView.mouseMoveEvent(self, event) 
    if self.scene().selectedItems(): 
     self.update() 
+0

나는 어제이 점을 들여다 보았다. 나는 그것을 업데이트해야한다고 어떻게 든 알릴 필요가있는보기 때문에 '올바른'방법이 무엇인지 알지 못했다고 생각했다. 아마도 아이템에 update() 호출이있을 때, 뷰에 속해있는 뷰에 신호를 보내서 다시 그리기를 지시 할 것입니까? –

+0

Infact, 위에 게시 된 mouseMoveEvent는 View에 속합니다. 아티팩트는 선택된 것이있을 때만 발생하므로 마우스를 움직이는 동안 (활성 선택이있을 때) 뷰를 업데이트하면 문제가 해결됩니다. 그러나, 나는 아직도 이것이 일어나는 이유를 이해하지 못합니다. 위에서 언급했듯이, 펜이 없을 때 전혀 문제가 없습니다. – vaishak