Чтобы заставить это работать, вам нужно привести указатель перед тем, как назначить его переменной указателя другого типа.
Hexagon *hexagon = (Hexagon*)itemAt(event->pos());
Но здесь есть опасность, так как itemAt()
может вернуть NULL
или элемент не может быть Hexagon
.
На самом деле, вы должны использовать приведение стиля C ++ следующим образом:
Hexagon *hexagon = dynamic_cast<Hexagon*>(itemAt(event->pos()));
if (hexagon != NULL)
{
hexagon->hexagonMethod();
}
Для этого потребуется, чтобы информация о типе времени выполнения была доступна через ваш компилятор.
Существует также функция QGraphicsItem
, которая называется type () , которая позволит вам использовать qgraphicsitem_cast()
, но для этого потребуется немного больше работы, включая определение enum
.
Еще одна вещь, за которой нужно следить. В зависимости от того, как ваша сцена и элементы потребляют события мыши, вы можете не всегда видеть, как вызывается переопределение mousePressEvent()
, когда вы этого ожидаете, поскольку событие мыши может никогда не дойти до представления, если оно используется чем-то в сцене .