这个问题与强制QGraphicsItem保持不动有关。
我希望在场景中移动时,
建议的解决方案是重写子类化的
然而,问题在于我希望场景中的其他所有内容保持不变,即如果我缩放或移动,我希望所有其他
解决此问题的一种不好的方法是从
然而,这会给
问题是,我是否需要从头重新实现
谢谢。
我希望在场景中移动时,
QGraphicsItem
能够固定在一个位置上。建议的解决方案是重写子类化的
QGraphicsView
的void paintEvent(QPaintEvent*)
。void MyGraphicsView::paintEvent(QPaintEvent*) {
QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
myItem->setPos(scenePos);
}
然而,问题在于我希望场景中的其他所有内容保持不变,即如果我缩放或移动,我希望所有其他
QGraphicsItems
表现为默认状态。解决此问题的一种不好的方法是从
void MyGraphicsView::paintEvent(QPaintEvent*)
中调用void QGraphicsView::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);
}
然而,这会给
my_item
添加闪烁行为,因为它首先使用QGraphicsView::paintEvent(event);
定位,然后再使用添加的代码。QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
myItem->setPos(scenePos);
问题是,我是否需要从头重新实现
void MyGraphicsView::paintEvent(QPaintEvent*)
,并编写myItem
所需行为和所有其他QGraphicsItems
的默认行为的代码,还是有更简单的方法可以做到这一点?谢谢。
setPos()
后不调用paintEvent()
呢? - Chris就是您需要的那个。您必须启用
QGraphicsItem :: ItemSendsScenePositionChanges`标志才能正常工作。 - thuga