Se corrigió la posición de QGraphicsItem, sin cambiar el comportamiento de otros QGraphicsItems en escena

Esta pregunta está relacionada con:Obligando a QGraphicsItem a quedarse puesto

Me gustaria tener unQGraphicsItem en un lugar fijo al moverse en la escena.

La solución sugerida es anular lavoid paintEvent(QPaintEvent*) de los sub-clasificadosQGraphicsView.

void MyGraphicsView::paintEvent(QPaintEvent*) {
  QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
  myItem->setPos(scenePos);
}

Sin embargo, el problema es que quiero que todo lo demás en la escena permanezca intacto, es decir, si hago zoom o me muevo quiero todos los demásQGraphicsItems comportarse por defecto.

Una mala manera de resolver esto es llamarvoid QGraphicsView::paintEvent(QPaintEvent*) desde dentrovoid MyGraphicsView::paintEvent(QPaintEvent*).

void MyGraphicsView::paintEvent(QPaintEvent* event) {
  QGraphicsView::paintEvent(event);

  QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
  myItem->setPos(scenePos);
}

Sin embargo, esto agrega un comportamiento vacilante amy_item ya que se coloca primero usandoQGraphicsView::paintEvent(event); y luego usando el código agregado

QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
myItem->setPos(scenePos);

La pregunta es, ¿tengo que volver a implementar?void MyGraphicsView::paintEvent(QPaintEvent*) Desde cero y escriba código tanto para el comportamiento deseado demyItem y el comportamiento por defecto de todos los demásQGraphicsItems, o hay una manera mas facil de hacer esto?

Gracias.

Respuestas a la pregunta(1)

Su respuesta a la pregunta