Seite 1 von 1

Triviales Vererbungsproblem, QPuschButton => ToolBarButto

Verfasst: 2. Februar 2007 14:55
von loh.tar
Hallo Forum!

Ich trau mich fast nicht zu fragen so trivial erscheint mir das Problem, und doch bin ich am verzweifeln...als C++ Neuling.

Ich möchte eine eigene QPuschButton Klasse erzeugen und die ToolBarButton nennen.

Als einzig neue "Eigenschaft" soll der bei jeder Erzeugung seine max/min Breite/Höhe festlegen. Momentan sieht das so aus:

ToolBarButton.h

Code: Alles auswählen

#include <qpushbutton.h>
class ToolBarButton : public QPushButton
{
  Q_OBJECT
  public:
    ToolBarButton (QWidget * , const char * );
   ~ToolBarButton ();:
};
ToolBarButton.cpp

Code: Alles auswählen

#include "ToolBarButton.h"
ToolBarButton::ToolBarButton (QWidget * parent, const char * name = 0) : QPushButton (parent, name)
{
 const int wert  = 25;
  setMaximumWidth(wert);
  setMinimumWidth(wert);
  setMaximumHeight(wert);
  setMinimumHeight(wert);

}

ToolBarButton::~ToolBarButton () {  }
MeinProg.cpp

Code: Alles auswählen

#include "ToolBarButton.h"
...
 ToolBarButton *button = new ToolBarButton(this);
...
button = new ToolBarButton(this);
...
button = new ToolBarButton(this);
...
usw
Der Compiler bricht "immer" mit einer Fehlermeldung wie dieser ab

Code: Alles auswählen

error: no matching function for call to...
candidates are: ToolBarButton::ToolBarButton(QWidget*, const char*)
../lib/ToolBarButton.h:34: note:                 ToolBarButton::ToolBarButton(const ToolBarButton&)
Ich bin mir sicher euch ist klar wieso...mir leider nicht ganz :(
Die Deklaration/Vererbung ist offensichtlich falsch.

Wenn mir einer nen Link empfehlen könnt wo idiotensicher erklärt wird wie man allgemein eine Unterklasse erzeugt wär ich auch schon dankbar. Alles was ich bisher gefunden hab half leider nicht.

Danke schonmal fürs lesen
Lothar

Verfasst: 2. Februar 2007 15:45
von Christian81
Ist 'this' auch ein QWidget?
Ausserdem fehlt der 'const char*' - Parameter. Da Du ihn bestimmt optional haben möchtest, würde ich

Code: Alles auswählen

class ToolBarButton : public QPushButton
{
  Q_OBJECT
  public:
    ToolBarButton (QWidget *parent, const char *name=NULL);
   ~ToolBarButton ();
};
bevorzugen.
-> Du hast den Default-Parameter also an die falsche Stelle geschrieben - er muss in die Deklaration.

Ist der Doppelpunkt hinter dem Destruktor gewollt?

Verfasst: 2. Februar 2007 17:42
von loh.tar
Christian...fühl dich geknuddelt :-)

Ein weiterer Hinweis darauf dass ich im umkehrschluss auch den Defaultparameter in der Implementierung löschen muß, hätte es mir noch erleichtert, aber ich bin zum glück drauf gekommen. => es klappt :D

Der Doppelpunkt hat sich nur hier im Posting rein geschlichen.

Was "this" angeht..tja, also..ähm...da es erstmal funktioniert offenbar ja.
Aber ich weiß nicht ob das immer so sein wird. Das Projekt ist recht umfangreich. Wie kann ich denn erreichen dass der neue ToolBarButton genauso flexibel ist wie der originale QPushButton?

Verfasst: 2. Februar 2007 17:46
von Christian81
loh.tar hat geschrieben:Christian...fühl dich geknuddelt :-)

Ein weiterer Hinweis darauf dass ich im umkehrschluss auch den Defaultparameter in der Implementierung löschen muß, hätte es mir noch erleichtert, aber ich bin zum glück drauf gekommen. => es klappt :D
Ich gebe immer nur Hinweise und verrate nie alles - nehmen mir zwar einige hier ab und zu übel, aber selber denken ist angesagt :)
loh.tar hat geschrieben: Was "this" angeht..tja, also..ähm...da es erstmal funktioniert offenbar ja.
Aber ich weiß nicht ob das immer so sein wird. Das Projekt ist recht umfangreich. Wie kann ich denn erreichen dass der neue ToolBarButton genauso flexibel ist wie der originale QPushButton?
Es muss ja nicht immer 'this' sein - es sollte immer das parent-Widget sein. Der Rest ergibt sich dann von allein - und falls es mal kein QWidget ist, sagt es Dir der Compiler schon.

Verfasst: 2. Februar 2007 19:32
von loh.tar
:? mit dem selber denken ist das sone Sache...
Als Anfänger verzweifelt man oft an den simpelsten Dingen weil einfach alles so verwirrend ist. Die offiziellen Dokumentationen sind mit unverständlichen Optionen voll gestopft. Klar wenn man fit ist sind die hilfreich, aber als Ahnungsloser sieht man den Wald vor lauter Bäumen nicht.
Es muss ja nicht immer 'this' sein - es sollte immer das parent-Widget sein. Der Rest ergibt sich dann von allein - und falls es mal kein QWidget ist, sagt es Dir der Compiler schon.
Äh?...das befürchte ich

Nu denn, wenn es soweit ist darf ich hoffentlich nochmal fragen.

Danke nochmal und schönes Wochenende
:-)