Naprawiono pozycję QGraphicsItem bez zmiany zachowania innych elementów QGraphicsItem w scenie

To pytanie dotyczy:Wymuszanie QGraphicsItem To Stay

Chciałbym miećQGraphicsItem w stałej lokalizacji podczas poruszania się po scenie.

Sugerowanym rozwiązaniem jest zastąpienievoid paintEvent(QPaintEvent*) z podklasyQGraphicsView.

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

Jednak problem polega na tym, że chcę, aby wszystko na scenie pozostało nienaruszone, tzn. Jeśli powiększę lub przesunie, chcę mieć wszystkie inneQGraphicsItems zachowywać się jak domyślnie.

Słabym sposobem rozwiązania tego problemu jest wywołanievoid QGraphicsView::paintEvent(QPaintEvent*) z wewnątrzvoid 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);
}

Dodaje to jednak migotaniamy_item ponieważ jest umieszczony jako pierwszyQGraphicsView::paintEvent(event); a następnie za pomocą dodanego kodu

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

Pytanie brzmi, czy muszę ponownie wdrożyćvoid MyGraphicsView::paintEvent(QPaintEvent*) od zera i napisz kod dla obu pożądanych zachowańmyItem i domyślne zachowanie wszystkich innychQGraphicsItems, czy jest to łatwiejszy sposób?

Dziękuję Ci.

questionAnswers(1)

yourAnswerToTheQuestion