EllipseItem in Graphicsscene

Alles rund um die Programmierung mit Qt
Antworten
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

EllipseItem in Graphicsscene

Beitrag 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 :oops: ?
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

Beitrag 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.
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Beitrag 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.
mathies
Beiträge: 149
Registriert: 9. Februar 2007 17:50
Wohnort: Erfurt

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

Beitrag von upsala »

C++-Grundlagen! Wie lange denkst du daß dein Item lebt?
konvex
Beiträge: 35
Registriert: 8. November 2008 17:58

Beitrag von konvex »

danke, jetzt gehts. ja mein header sah genauso aus, ich dachte nur dass

Code: Alles auswählen

EllipseItem item(100,100,10,10);
addItem(&item);
das gleiche ist wie

Code: Alles auswählen

EllipseItem *item = new EllipseItem(100,100,10,10);
addItem(item);
deswegen kam keine ausgabe.
Antworten