この質問は関連しています: QGraphicsItem を強制的にそのままにしておく
QGraphicsItemシーン内を移動するときは、固定された場所に配置したいと思います。
void paintEvent(QPaintEvent*)推奨される解決策は、サブクラスのをオーバーライドすることQGraphicsViewです。
void MyGraphicsView::paintEvent(QPaintEvent*) {
QPointF scenePos = mapToScene(0,0); // map viewport's top-left corner to scene
myItem->setPos(scenePos);
}
ただし、問題は、シーン内の他のすべてをそのままにしておきたいということです。つまり、ズームまたは移動する場合、他のすべてQGraphicsItemsをデフォルトとして動作させたいのです。
void QGraphicsView::paintEvent(QPaintEvent*)これを解決する 1 つの貧弱な方法は、 内から呼び出すことvoid 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);
}
ただし、最初に追加されたコードを使用して配置され、次に追加されたコードを使用して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があるか、またはこれを行う簡単な方法があるかということです。
ありがとうございました。