この質問は関連しています: 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
があるか、またはこれを行う簡単な方法があるかということです。
ありがとうございました。