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.