paintEvent verständnis frage

Alles rund um die Programmierung mit Qt
Antworten
TimsonC2000
Beiträge: 27
Registriert: 12. August 2004 17:57
Kontaktdaten:

paintEvent verständnis frage

Beitrag 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()
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Meine Glaskugel sagt du solltest dich mal mit C++ beschäftigen und den Unterschied von Zeigern und Referenzen verstehen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TimsonC2000
Beiträge: 27
Registriert: 12. August 2004 17:57
Kontaktdaten:

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Deine aber auch nicht da wir immer noch keine Codezeile gesehen haben...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TimsonC2000
Beiträge: 27
Registriert: 12. August 2004 17:57
Kontaktdaten:

Beitrag 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&)'
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
TimsonC2000
Beiträge: 27
Registriert: 12. August 2004 17:57
Kontaktdaten:

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