axeljaeger
28-10-2002, 14:50
Ich habe mir eine Klasse geschrieben - MBase -, die sich ähnlich wie in Qt in Klassen organisiert.
Es gibt ein RootObject und jedes weitere Object, das von MBase erbt, hat in seinem Konstruktor
einen Pointer anzugeben. Der Sinn der Sache liegt darin, das ich alle Objekte auf einen Schlag
freigeben kann, weil im Desktruktor von MBase alle Unterobjekte gelöscht werden.
Soviel zur Vorgeschichte.
Das ganze soll nun in einem Widgetset genutzt werden. Wenn ich ein Objekt von MBase oder von
MBase geerbten Klassen erzeuge, bekommt das ParentObject ein childEvent(), mit dem man merkt,
dass ein neues ChildObject eingefügt wurde. Das würde ich gerne nutzen, um das Layout des
ParentWidgets neu zu berechnen. Das funktioniert aber nicht, weil das Layout erst neu berechnet
werden kann, wenn der Konstruktor der Klasse, die von MBase erbt aufgerufen wurde, weil
erst dort Sachen, wie etwa die minimale Größe eingestellt werden.
class MWidget : public MBase
{
public:
MWidget(MBase* parent, TString name) : MBase(MBase* parent, TString name)
{
}
}
Also parent bekommt von Konstruktor von MBase des childs, in diesem Fall MWidgeg, ein childEvent(), aber bevor
der Konstruktor von MWidget aufgerufen wurde. Ich aber brauche ein childEvent() NACHDEM
MWidget fertig kontruiert ist. Ich will aber dem Anwender nicht zumuten, dass er, jedesmal, wenn er
etwas von MBase ableitet, in seinen Konstruktor am Ende "getParent()->childEvent()" schreiben muß,
oder das er, wenn er mit seinen Widgets fertig ist, MWidget::relayout aufrufen muß.
Wer kann helfen?
Es gibt ein RootObject und jedes weitere Object, das von MBase erbt, hat in seinem Konstruktor
einen Pointer anzugeben. Der Sinn der Sache liegt darin, das ich alle Objekte auf einen Schlag
freigeben kann, weil im Desktruktor von MBase alle Unterobjekte gelöscht werden.
Soviel zur Vorgeschichte.
Das ganze soll nun in einem Widgetset genutzt werden. Wenn ich ein Objekt von MBase oder von
MBase geerbten Klassen erzeuge, bekommt das ParentObject ein childEvent(), mit dem man merkt,
dass ein neues ChildObject eingefügt wurde. Das würde ich gerne nutzen, um das Layout des
ParentWidgets neu zu berechnen. Das funktioniert aber nicht, weil das Layout erst neu berechnet
werden kann, wenn der Konstruktor der Klasse, die von MBase erbt aufgerufen wurde, weil
erst dort Sachen, wie etwa die minimale Größe eingestellt werden.
class MWidget : public MBase
{
public:
MWidget(MBase* parent, TString name) : MBase(MBase* parent, TString name)
{
}
}
Also parent bekommt von Konstruktor von MBase des childs, in diesem Fall MWidgeg, ein childEvent(), aber bevor
der Konstruktor von MWidget aufgerufen wurde. Ich aber brauche ein childEvent() NACHDEM
MWidget fertig kontruiert ist. Ich will aber dem Anwender nicht zumuten, dass er, jedesmal, wenn er
etwas von MBase ableitet, in seinen Konstruktor am Ende "getParent()->childEvent()" schreiben muß,
oder das er, wenn er mit seinen Widgets fertig ist, MWidget::relayout aufrufen muß.
Wer kann helfen?