Corrigido QGraphicsItem posição, sem alterar o comportamento de outros QGraphicsItems em cena

Esta questão está relacionada com:Forçando QGraphicsItem a ficar parado

Eu gostaria de ter umQGraphicsItem em um local fixo quando se movimentar na cena.

A solução sugerida é sobrepor ovoid paintEvent(QPaintEvent*) da subclasseQGraphicsView.

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

No entanto, o problema é que eu quero que tudo o mais na cena permaneça intacto, ou seja, se eu zoom ou movimento eu quero todos os outrosQGraphicsItems se comportar como padrão.

Uma maneira pobre de resolver isso é ligarvoid QGraphicsView::paintEvent(QPaintEvent*) de 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);
}

No entanto, isso adiciona um comportamento de cintilaçãomy_item já que está posicionado primeiro usandoQGraphicsView::paintEvent(event); e depois usando o código adicionado

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

A questão é, tenho que reimplementarvoid MyGraphicsView::paintEvent(QPaintEvent*) a partir do zero e escrever código para o comportamento desejado demyItem e o comportamento padrão de todos os outrosQGraphicsItems, ou há uma maneira mais fácil de fazer isso?

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion