Seite 1 von 1

Aus einem QCanvasItem auf ein QCanvasText Text schliesse

Verfasst: 4. Oktober 2006 21:42
von McNik
Hallo zusammen

habe das Problem, dass ich eine QCanvas habe, in dem verschiedene QCanvas Rectangle enthalten sind. In diesen Rectangle ist jeweils ein Text der zur "identikikation" dient. An diesen Text muss ich zum speichern und laden der Canvas (vor allem der Position) ran kommen.
Habe mir erst überlegt, einfach die RTTI Nummer bei den Rectangle und Texten immer zu erhöhen (z.B. rec rtti = 100x, text rtti = 500x) um damit den Text und das Rectangle zu identifizieren.
Die RTTI Nummern sollen aber eigentlich nur zur Identifikation der Object Art sein.
Gibt es eine Möglichkeit auf einen Text zu schliessen, wenn ich nur ein QCanvasItem Iteratot *it habe, von dem ich weiss, das er einText ist ((*it)->rtti==3) ?
Mir ist leider nix eingefallen und aus google habe ich auch nichts raus bekommen :oops:

Schon mal Danke für eure Ideen

mehr oder weniger GELÖST

Verfasst: 5. Oktober 2006 10:54
von McNik
also habe etwa in einem QT Buch gefunden

Code: Alles auswählen

*Ausschnitt*
 
	    QCanvasItemList inRectangle = (*it)->collisions(true);
	    QCanvasItemList::iterator st;
	    for (st = inRectangle.begin();st != inRectangle.end(); ++st)
	    {			
		if ((*st)->rtti() == 3)
		{  
                   //warum funktioniert das?? 
                   QCanvasText *text = (QCanvasText *)(*st);
		    qDebug( " ist in Modulname an Stelle:" + text->text());
		}

Aber ich versteh nicht genau warum das funktioniert. Kopiere ich damit einfach nur den Zeiger auf das Object auf eine andere ObjectArt?

Re: mehr oder weniger GELÖST

Verfasst: 5. Oktober 2006 13:17
von Goos
McNik hat geschrieben: Kopiere ich damit einfach nur den Zeiger auf das Object auf eine andere ObjectArt?
Koennte man grob so sagen, ja.
Du solltest mit dem C-Style Cast im allgemeinen aber vorsichtig sein.
Der bietet dir keinerlei Typsicherheit.
In dem genauen Fall ueberpruefst du vorher die Runtime Typinformationen, kannst dir also sicher sein, dass du auch ein QCanvasText vor dir hast, aber allgemein wuerde ich eher zu einem dynamic_cast raten.

Goos