Seite 1 von 1

paintEvent verständnis frage

Verfasst: 29. Januar 2006 12:35
von TimsonC2000
ich hab ein QFrame auf dem ich Objekte malen möchte - diese Objekte haben eine draw funktion die ich in dem paintevent von meinem abgeleiteten QFrame aufrufe

wenn mein zu malendes Objekt ein Zeiger ist dann bekomm ich eine fehlermeldung, wenn nicht dann funktioniert alles - würde die Objekte gerne als Zeiger haben.

warum geht das nicht

PS: die Fehlermeldung:

Code: Alles auswählen

ant.cpp: In member function `void Ant::draw(QWidget*)':
ant.cpp:44: error: no matching function for call to `QPainter::QPainter(QWidget*&)'
/usr/include/qt4/QtGui/qpainter.h:58: note: candidates are: QPainter::QPainter(const QPainter&)
/usr/include/qt4/QtGui/qpainter.h:71: note: QPainter::QPainter(QPaintDevice*)
/usr/include/qt4/QtGui/qpainter.h:70: note: QPainter::QPainter()

Verfasst: 29. Januar 2006 13:25
von Christian81
Meine Glaskugel sagt du solltest dich mal mit C++ beschäftigen und den Unterschied von Zeigern und Referenzen verstehen.

Verfasst: 29. Januar 2006 13:43
von TimsonC2000
ich geb ja zu das ich das mit den zeigern und referenzen immer noch nicht 100%ig gerafft habe - aber die antwort bringt mich jetzt nicht wirklich weiter

Verfasst: 29. Januar 2006 14:01
von Christian81
Deine aber auch nicht da wir immer noch keine Codezeile gesehen haben...

Verfasst: 29. Januar 2006 14:08
von TimsonC2000

Code: Alles auswählen

class DrawFrame :: public QFrame
{
   Q_OBJECT
   
   public:
       DrawFrame(QWidget *aParent=0);
       ~DrawFrame();
   public slots:
       void addAnt();
   
   protected:
       virtual void paintEvent(QPaintEvent * aPaintEvent);
}

DrawFrame::DrawFrame(QWidget *aParent):QFrame(aParent)
{
   myTestAnt = new Ant();
}

void DrawFrame::paintEvent(QPaintEvent * aPaintEvent)
{
   myTestAnt->draw(this);
   QFrame:  aintEvent(aPaintEvent);
}

class Ant 
{
   public:
       Ant();
       ~Ant();
       void draw(QWidget *aWidget);
}

void Ant::draw(QWidget *aWidget)
{
   myPainter = new QPainter(aWidget);
}
wenn ich
myPainter = new QPainter(*aWidget)
schreibe ist die fehlermeldung bis auf den zusätzlichen Zeiger fast gleich

ant.cpp:43: error: no matching function for call to `QPainter::QPainter(QWidget&)'

Verfasst: 29. Januar 2006 14:21
von Christian81
Ok, dann schauen wir uns das mal an:

Laut Doku gibt es für QPainter diesen Konstruktor: QPainter::QPainter ( QPaintDevice * pd ). D.h. man muss einen Zeiger übergeben.

Deiner draw-Funktion übergibst Du einen Zeiger auf dein Widget - also kann man das einfach dem QPainter übergeben. Da QPaintDevice keinen anderen Konstruktor hat, kannst Du es auch nicht anders übergeben. So ist es ja auch die einfachste Möglichkeit.

Allerdings weiss ich nich warum du QPainter mit new erzeugst (und wo myPainter definiert ist). Des weiteren sollten die Klassendeklarationen in ein Header.

Verfasst: 29. Januar 2006 14:39
von TimsonC2000
was ich ja auch mit aWidget mache ... hab die sachen die nicht zum code gehören rausgenommen

hier bei mir sind die klassen natürlich schön brav in header und cpp aufgeteilt - wenn du etwas zeit hast würde ich mich freuen wenn du dich ma über icq meldest - irgendwie kommt mein problem nicht richtig an