2012-05-06 4 views
0

У меня есть этот код:Почему QPainter очищает виджет каждый раз, когда я его использую?

def paintEvent(self, paintEvent): 
    self._painter.begin(self) 
    try: 
     while True: 
      color, rectangle = self._paint_queue.popleft() 
      self._painter.fillRect(rectangle, color) 
    except IndexError: 
     pass 
    finally: 
     self._painter.end() 

def drawInstruction(self, ptr, instruction): 
    rectangle = QtCore.QRect(
      (ptr % self.cols)*CELL_SIZE, 
      math.floor(ptr/float(self.cols))*CELL_SIZE, 
      CELL_SIZE, 
      CELL_SIZE) 
    self._paint_queue.append((opcode2color[instruction.opcode], 
     rectangle)) 
    self.update() 

И каждый раз, когда я называю drawInstruction(), все, что было уже нарисованный очищается. Остается только новый прямоугольник.

И перекрашивать все каждый раз, когда я называю drawInstruction(), не является решением, потому что drawInstruction() вызывается очень часто.

ответ

4

вы должны перерисовать содержимое виджета на каждом paintEvent, нет другого выхода.

Возможно, в вашем случае лучше нарисовать другое устройство окраски (QImage, QPixmap, QPicture, ...), и просто нарисуйте это на каждом событии краски.

Смежные вопросы