QGraphicsItemを自分のカスタムクラスHexagonにサブクラス化しました。 QGraphicsView::itemAt
、またはQGraphicsScene::itemAt
などの関数を使用しようとすると、代わりにQGraphicsItems
が検索されるため、Hexagon
オブジェクトは返されません。
代わりにHexagon
オブジェクトを検索するように指示するにはどうすればよいですか?または、私のHexagon
クラスで何かを変更する必要がありますか?あるいは、itemAt()
を再実装しますか?QGraphicsItemをサブクラス化すると、QGraphicsScene/ViewでitemAt()を使用できなくなる
現在、QGraphicsView
、特にmousePressedEvent
をサブクラス化してクリックしたHexagon
オブジェクトに関する情報を取得しています。
void LatticeView::mousePressEvent(QMouseEvent *event)
{
Hexagon *hexagon = itemAt(event->pos());
...
}
しかし、私はコンパイルしようとすると、私は次のエラーを取得する:私が欲しいもの
invalid conversion from 'QGraphicsItem*' to 'Hexagon*'
は、私はいくつかの変数にアクセスできるようにクリックされたHexagon
オブジェクトを取得できるようにすることです私はHexagon
クラスで、QGraphicsItem
クラスに暗黙的に定義されていません。あなたが別の型のポインタ変数に割り当てる前にポインタをキャストする必要があります
「私のHexagonオブジェクトは返されません」という意味はどうですか?あなたがQGraphicsItem *からHexagon *に前後にキャストする必要があるように思えます。 –
boundingRect()を実装しましたか? –
"itemAt()"はQGraphicsItemの戻り値の型を持っているので、例えばQGraphicsItemのmousePressedEvent関数でitemAt()を呼び出すと、戻り値の型がQGraphicsItemであるため、私のHexagonオブジェクトは返されません。 QGraphicsItemとHexagonの間を行き来する必要があるかもしれませんが、どうやってそれをやるのか分かりません。私はHexagonクラスのQGraphicsItemを継承しても十分だと思っていましたが、明らかにそうではありません。ありがとう! – Anthony