Seite 1 von 1

QPainter Vererbung

Verfasst: 4. August 2007 20:09
von thespiders
Hallo NG,

Habe ein kleines Problem damit die QPainter-Klasse zu vererben. Ein QPainter wird ja mit QPainter painter(this); erzeugt - dieses Konstrukt, was ist das?

Wenn ich das vererbe möchte ich in meiner neuen Klasse MyPainter einen ähnlichen Aufruf machen MyPainter painter(this) und so das PaintDevice angeben. MyPainter soll genauso sein wie QPainter, nur ein paar Extramethoden haben wie drawBubble(...)
Aber ich bekomme die Fehlermeldung: `QPainter' is not an accessible base of `MyPainter'. Wie müsste der Konstruktor aussehen?

Außerdem möchte ich ihn global deklarieren, das geht aber nicht wegen der painter(this)-sache. Wie mache ich das?

Gruß, Johannes

Verfasst: 4. August 2007 20:22
von Christian81
1. Lern mal C++ - Vererbung sollte man schon beherrschen bevor man mit Qt anfängt
2. Ohne das Du uns Code zeigst können wir nicht helfen

Verfasst: 6. August 2007 15:24
von lepsai
Dein problem ist wahrscheinlich, dass deine Vererbung etwa so aussieht:

class MyPainter: QPainter
{
...
};

sollte aber so sein:

class MyPainter: public QPainter
{

};



Global deklarieren ist Quatsch, da ein Painter eine Relation zu dem PaintDevice haben muss. Also ist eine Deklaration:

MyPainter globalPainter;

sinnlos.

Alternativ ginge:

MyPainter* myGlobalPainterPtr = NULL;

mit einer späteren Instanzerung. Aber das ist auch Schwachsinn. Also sag uns, was du erreichen möchstest, dann können wir wirklich helfen...


Und hör auf Christian, C++ Kentnisse sind unabdingbar, um mit Qt zu arbeiten...

Verfasst: 6. August 2007 21:44
von thespiders
So 100% trittfest bin ich leider tatsächlich noch nicht in Vererbung. Hab mich jetzt damit beholfen die Instantiierung mit

QPainter *painter = new QPainter(this);

durchzuführen, anstatt mit

QPainter painter(this);

wie es in den Tutorials steht. Dann klapps auch wie von anderswo gewohnt mit der Vererbung meiner Klasse class MyPainter : public QPainter.

Dass ich dann nen Pointer hab auf ein Painterobjekt stört nicht. Funktioniert trotzdem. Danke für eure Mühen.