Hallo
folgendes Problem:
wenn ich eine QGraphicsItemGroup habe, so liefert QGraphicsView::items(const QPoint &) immer einen Zeiger auf diese Gruppe, wenn ich irgendeinen Punkt innerhalb der BoundingBox der Gruppe teste. Was ich haben möchte ist jedoch eine Funktion, die den Punkt nicht auf shape (bzw. boundingBox) der Gruppe, sondern auf shape aller Items in der Gruppe prüft und nur dann die Gruppe als item an dieser Stelle betrachtet, wenn mindestens eines der Items in der Gruppe an diesem Punkt liegt.
Was ist der beste Ansatz, dies zu erreichen? Sollte man QGraphicsItemGroup::shape() const reimplementieren? Und wie macht man das sinnvollerweise bei nichtzusammenhängenden Items in der Gruppe?
Oder ist ein anderer Ansatz sinnvoller?
Danke!
QGraphicsItemGroup und QGraphicsView::items(const QPoint &am
soweit ich es der Debugausgabe entnehme, liefert QGraphicsView::items(const QPoint &) eine Liste von QGraphicsItems zurück, wobei die Gruppe als ein einzelnes Item zurückgeliefert wird. Man könnte natürlich theoretisch die von items(const QPoint &) gelieferte Liste durchgehen, jeweils einen Cast auf QGraphicsItemGroup versuchen und dann bei den QGraphicsItemGroup nochmal die Liste der Items aus der Gruppe holen und einzeln mit contains durchprüfen. Das würde aber aus jedem items(const QPoint &) einen größeren Block machen.upsala hat geschrieben:Liefert QGraphicsView::items(const QPoint &) nur ein Item zurück? Ansonsten noch mit bool QGraphicsItem::contains ( const QPointF & point ) const die Kinder der Gruppe durchgehen.
Soweit ich die Prinzipien verstehe, ist doch eigentlich QGraphicsItem::shape() die zuständige Funktion, oder?