Seite 1 von 1

QGraphicsScene Child Items

Verfasst: 17. August 2010 10:02
von TheBert
Hi,

ich habe eine qgraphicsscene und darauf ein paar objekte lieben (qgraphicstextitem, qgraphicsrectitem, usw.)

Ich bekomme ja mit

Code: Alles auswählen

QList<QGraphicsItem *> childs = items();
alle elemente die auf dieser scene platziert sind.

Die childs kann ich mittels qgraphics_cast auf qgraphicstextitems casten und dann über den objectName identifizieren.

Mein problem ist jetzt, das ich auf der scene z.b. 4 qgraphicsrectitems liegen haben, aber die qgraphicsrectitems keinen objectName haben. Wie kann ich die qgraphicsrectitems identifizieren? Sodass ich sagen kann, z.b. text_item1 liegt in feld 2, text_item2 liegt in feld 1 usw.

Danke!

Verfasst: 17. August 2010 10:50
von upsala
Auf QGraphicsRectItem casten und kontrollieren ob der Pointer nicht 0 ist.

Verfasst: 17. August 2010 10:53
von franzf
Du willst sie über einen bestimmten Namen (QString) identifizieren?
Nimm (z.B.) nen QHash<QGraphicsRectItem*, QString>.

Verfasst: 17. August 2010 10:58
von TheBert
upsala hat geschrieben:Auf QGraphicsRectItem casten und kontrollieren ob der Pointer nicht 0 ist.
Und das sagt mir wie das QGraphicsRectItem heißt? :wink:
franzf hat geschrieben:Du willst sie über einen bestimmten Namen (QString) identifizieren?
Nimm (z.B.) nen QHash<QGraphicsRectItem*, QString>.
Danke für die anregung, aber gibts da nicht auch so eine möglichkeit wie bei QGraphicsTextItem mittels objectName()?

Danke!

Verfasst: 17. August 2010 11:09
von franzf
TheBert hat geschrieben:Danke für die anregung, aber gibts da nicht auch so eine möglichkeit wie bei QGraphicsTextItem mittels objectName()?
Jein, denn QGraphicsTextItem erbt von QGraphicsObject, dieses wiederum von QGraphicsItem UND QObject - und QObject bietet eben objectName. QGraphicsRectItem erbt nur von QGraphicsItem, deshalb gibt es keinen objectName.
Wenn dir der Weg über die QHash/QMap zu kompliziert ist (kann ich mir fast nicht vorstellen :P), kannst du mit einer eigenen Klasse arbeiten:

Code: Alles auswählen

class MyRectItem : public QObject, public QGraphicsRectItem {
};

Verfasst: 17. August 2010 11:13
von TheBert
Danke für die antwort. Zu kompliziert nicht, nur muss ich jetzt entscheiden, entweder die 4 und manchmal auch nur 2 QGraphicsRectItems in QHash zu verpacken inkl. einem namen, oder ich erstelle eine eigene klasse.

Ich werde warscheinlich eine eigene klasse erben lassen. Danke für den hinweis.

Verfasst: 17. August 2010 12:47
von upsala
Man könnte auch data() verwenden.

Verfasst: 17. August 2010 12:48
von franzf
upsala hat geschrieben:Man könnte auch data() verwenden.
Oh... Seit wann gibts denn das? Ist mir noch nie aufgefallen :D

Verfasst: 17. August 2010 12:54
von TheBert
Ok, dann kann ich mir das auch ersparen, danke für den tipp mit data(), das ist genau das was ich gesucht habe.