QGraphicsScene::addPixmap
は、追加されたQGraphicsPixmapItemへのポインタを返します。あなたはその位置を設定したい場合は、このような何かを行うことができます。
QGraphicsPixmapItem *item = scene->addPixmap(yourPixmap);
item->setPos(50, 50); // sets position to scene coordinate (50, 50)
あなたが他の画像の上に画像をオーバーレイしたい場合は
、あなたはZ値について知っていることを確認してください。詳細は、
QGraphicsItem documentationを参照してください。基本的に、z値は積み重ね順序を決定します。
最後に、QGraphicsItemsの子育てに慣れてください。 QGraphicsItemに親アイテムがある場合、QGraphicsItemの座標は親の座標で表現されることを意味します。したがって、項目の位置が(0、0)で、シーン位置が(50,50)の項目の子である場合、子項目は(50,50)に表示されます。したがって、上の例では、次のようにすることができます。
これにより、親が「item」である新しい項目「childItem」が作成されます。その座標はまだ設定されていないので(0、0)、「アイテム」の子であるためシーン座標は(50,50)です。アイテムの親を指定する場合、子アイテムをシーンに追加する必要はありません。暗黙的に追加されます。
したがって、大きな画像がシーン内でオフセットされている場合(四角形の枠内にある矩形の画像)、どのフレームがマウスイベントですか? QMouseEvent()がサブクラス化されたQGraphicsView内から(50,50)の座標を与えた場合、これらの座標はグラフィックスビューに対する相対座標ですか?これらの座標をより大きな画像内のピクセルに一致させるための簡単な(自動化された)方法はありますか? –
はい、これらの座標はビューの座標です。 QGraphicsViewにはitemAt()メソッドがあり、指定された座標にあるアイテムへのポインタを返します。これは親アイテムでも子供であってもかまいません。QGraphicsItem :: parentItemを試して、アイテムに親があるかどうかを調べることができます。 QGraphicsItem、QGraphicsScene、QGraphicsViewのマッピング関数をご覧ください。座標を変換する簡単な方法があります。また、[The Graphics View Coordinate System](http://qt-project.org/doc/qt-4.8/graphicsview.html)をご覧ください。 – Anthony
少なくとも私の経験では、QGraphicsViewをサブクラス化するよりも、QGraphicsItem(あなたのケースではQGraphicsPixmapItem)やQGraphicsSceneをサブクラス化する方がずっと便利です。これらはすべてマウスハンドラを持っています。 – Anthony