QGraphicsScene Child Items

Alles rund um die Programmierung mit Qt
Antworten
TheBert
Beiträge: 21
Registriert: 1. September 2009 14:27

QGraphicsScene Child Items

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

Beitrag von upsala »

Auf QGraphicsRectItem casten und kontrollieren ob der Pointer nicht 0 ist.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du willst sie über einen bestimmten Namen (QString) identifizieren?
Nimm (z.B.) nen QHash<QGraphicsRectItem*, QString>.
TheBert
Beiträge: 21
Registriert: 1. September 2009 14:27

Beitrag 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!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag 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 {
};
TheBert
Beiträge: 21
Registriert: 1. September 2009 14:27

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

Beitrag von upsala »

Man könnte auch data() verwenden.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

upsala hat geschrieben:Man könnte auch data() verwenden.
Oh... Seit wann gibts denn das? Ist mir noch nie aufgefallen :D
TheBert
Beiträge: 21
Registriert: 1. September 2009 14:27

Beitrag 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.
Antworten