QGraphicsItemGroup und QGraphicsView::items(const QPoint &am

Alles rund um die Programmierung mit Qt
Antworten
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

QGraphicsItemGroup und QGraphicsView::items(const QPoint &am

Beitrag von otternase »

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!
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

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.
otternase
Beiträge: 62
Registriert: 25. Januar 2008 12:20

Beitrag von otternase »

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 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.
Soweit ich die Prinzipien verstehe, ist doch eigentlich QGraphicsItem::shape() die zuständige Funktion, oder?
Antworten