Seite 1 von 1
EllipseItem in Graphicsscene
Verfasst: 12. November 2008 15:01
von konvex
Hallo,
ich habe folgendes kleines programm:
graphicsscene.cpp
Code: Alles auswählen
GraphicsScene::GraphicsScene()
{
EllipseItem item(100,100,10,10);
addItem(&item);
}
ellipseitem.h
Code: Alles auswählen
class EllipseItem : public QGraphicsEllipseItem
{
public:
EllipseItem(int x,int y,int w,int h) : QGraphicsEllipseItem (x,y,w,h) {}
};
ich möchte, dass mir einfach die ellipse in die scene gemalt wird, jedoch krieg ich nur ein leeres fenster...
wenn ich die klasse graphicsscene weglasse und sie in der main funktion direkt erstelle, da geht es, aber ich brauche sie als eigene klasse um weiter machen zu können...
Kann mir jemand helfen

?
Verfasst: 12. November 2008 15:47
von mathies
Hallo,
probier doch mal einfach die addEllipse ( qreal x, qreal y, qreal w, qreal h, const QPen & pen = QPen(), const QBrush & brush = QBrush() ) Funktion die Dir die Scene eh schon bietet. Solltest dann was sehen, liegt der Fehler wohl in einer Deiner abgeleiteten Klassen.
Verfasst: 12. November 2008 16:44
von konvex
das hab ich schon versucht, das geht. aber ich möchte in der klasse ellipseitem weiterarbeiten und dazu muss ich die items aus der klasse in der scene ausgeben können...
das muss doch irgendwie gehen, ich hab auch keine idee was an dem momentanen programm falsch ist.
Verfasst: 12. November 2008 17:02
von mathies
Hm,
zwei Dinge noch. Zum einen würde ich es in Header- und Source-File trennen.
Header-File
Code: Alles auswählen
#include <QGraphicsEllipseItem>
class EllipseItem : public QGraphicsEllipseItem
{
public:
EllipseItem(int x,int y,int w,int h);
~EllipseItem()
};
Source-File
Code: Alles auswählen
EllipseItem::EllipseItem(int x,int y,int w,int h) : QGraphicsEllipseItem(x,y,w,h)
{
}
EllipseItem::~EllipseItem()
{
}
Das andere ist, dass Du in Deinem Konstruktor ein
lokales Item erzeugst. Sobald Du da raus bist sollte das wieder gelöscht sein. Versuch da mal ein neues Objekt zu erzeugen und der Scene den Zeiger zu geben.
also...
Code: Alles auswählen
GraphicsScene::GraphicsScene()
{
EllipseItem item = new EllipseItem(100,100,10,10);
addItem(item);
}
Damit ist nur der lokale Zeiger gelöscht und die Scene behält Ihren Zeiger auf das Objekt.
Verfasst: 12. November 2008 17:15
von upsala
C++-Grundlagen! Wie lange denkst du daß dein Item lebt?
Verfasst: 12. November 2008 17:37
von konvex
danke, jetzt gehts. ja mein header sah genauso aus, ich dachte nur dass
das gleiche ist wie
Code: Alles auswählen
EllipseItem *item = new EllipseItem(100,100,10,10);
addItem(item);
deswegen kam keine ausgabe.