Anfängerfragen: dyn. erstellen beliebig vieler Elemente
Verfasst: 15. Juni 2006 15:08
Hallo,
ich muss mir in einer Windowklasse beliebig viele instanzen einer klasse merken, teils muss ich auch dynamisch Element wie QPushButtons, layouts o.ä. erzeugen.
zuerst einmal:
die ganzen Q-Elemente werden ja immer auf dem Heap erzeugt, haben immer ein parent, dass bis hoch zur Applikation verfolgt werden kann und damit ist immer sicher gestellt, dass beim schliessen der applikation alle Elemente jeweils von ihrem Parent den Befehl zur Selbstzerstörung erhalten. Richtig? Somit muss ich mich nicht darum kümmern die zu zerstören? Und im Gegensatz zu Objekten auf dem Stack bleiben diese Objekte auch erhalten wenn der Scope verlassen wird, somit bleiben die auch, wenn die Funktion die sie erstellt verlassen wird? Oder bleiben die, weil sie ihrem Parent hinzugefügt wurden?
Jetzt reicht es mir ja nicht, die zu erstellen, ich will die ja auch noch mit Signalen versehen, dazu muss ich die ansprechen können. In php würde ich da vielleicht gleich beim generieren vernünftige Variablennamen erzeugen:
über die Möglichkeit sowas zu machen bin ich bei c++ noch nicht gestolpert. Geht das?
Also wäre meine erste Reaktion einfach alle Elemente in einem Array zu speichern. Das scheitert in c++ aber daran, dass ich nicht weiss, wieviele das mal sein werden. ich hab mal nachgeschaut, wie das im calculator-Beispiel von Qt gemacht wird, da werden ja auch einige Buttons erzeugt:
Na prima, sie legen also von vornherein fest, dass es nur 10 Buttons geben darf. Da muss es doch hoffentlich auch irgendeine möglichkeit geben sowas zu konstruieren, ohne vorher zu wissen, wieviele Objekte man brauchen wird??
ich muss mir in einer Windowklasse beliebig viele instanzen einer klasse merken, teils muss ich auch dynamisch Element wie QPushButtons, layouts o.ä. erzeugen.
zuerst einmal:
die ganzen Q-Elemente werden ja immer auf dem Heap erzeugt, haben immer ein parent, dass bis hoch zur Applikation verfolgt werden kann und damit ist immer sicher gestellt, dass beim schliessen der applikation alle Elemente jeweils von ihrem Parent den Befehl zur Selbstzerstörung erhalten. Richtig? Somit muss ich mich nicht darum kümmern die zu zerstören? Und im Gegensatz zu Objekten auf dem Stack bleiben diese Objekte auch erhalten wenn der Scope verlassen wird, somit bleiben die auch, wenn die Funktion die sie erstellt verlassen wird? Oder bleiben die, weil sie ihrem Parent hinzugefügt wurden?
Jetzt reicht es mir ja nicht, die zu erstellen, ich will die ja auch noch mit Signalen versehen, dazu muss ich die ansprechen können. In php würde ich da vielleicht gleich beim generieren vernünftige Variablennamen erzeugen:
Code: Alles auswählen
in php:
$varname = 'foo';
$$varname = 'hello world';
echo $foo; // gibt 'hello world' aus
Also wäre meine erste Reaktion einfach alle Elemente in einem Array zu speichern. Das scheitert in c++ aber daran, dass ich nicht weiss, wieviele das mal sein werden. ich hab mal nachgeschaut, wie das im calculator-Beispiel von Qt gemacht wird, da werden ja auch einige Buttons erzeugt:
Code: Alles auswählen
aus calculator.h:
enum { NumDigitButtons = 10 };
Button *digitButtons[NumDigitButtons];