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.