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.