Qt Frage
-
Hat es einen wichtigen Grund wieso im Qt-Tutorial manchmal die Widgets auf dem Heap erstellt werden und manchmal auf dem Stack?
Also
QLabel* label = new QLabel("Hallo"); QLabel label("Hallo");
Und was genau macht QApplication::translate? So richtig schlau bin ich von der Qt-Doc nicht geworden.
Twinky Winky
-
Wegen der QApplication::translate müsste ich auch erst in der Doku nochmal nachschauen.
Zu den Widgets, wenn du jetzt zum Beispiel dir ein eigenes Widget erstellst, zum Beispiel eine eigene Klasse von QWidget ableitest, dann muss dieses in der main auf jeden Fall auf dem Heap erstellt werden, da es sonst nicht angezeigt werden kann.
Die Widgets wie QLabel die innerhalb deines Fensters platziert werden kannst du auch auf dem Stack erstellen, da dies zum Beispiel vom Layout verwaltet wird.
Erstellst du auch diese auf dem Heap, übernimmt dein Widget quasi die Speicherverwaltung, das QLabel wird automatisch freigegeben wenn dein Widget gelöscht wird.Müsste so eigentlich stimmen.
Falls nicht dann sorry und verbessert mich bitte;-)
Gruß freeG
-
Nein. Ein QObject managed IMMER seine children. Es gibt keine Möglichkeit zu erkennen ob die jetzt auf HEAP oder STACK liegen. Wenn jetzt ein child im automatischen Speicherbereich (STACK) liegt, wird es mehrfach gelöscht, und das geht richtig in die Hose!
Desweiteren: Die main() ist der sicherste Ort, Widgets auf dem Stack anzulegen - das MainWindow. Am Ende der main() wird es automatisch zerstört. Angezeigt werden kann es sehr wohl! Warum denn auch nicht?!?
-
Oh ok, sorry tut mir leid.
Dann hab ich mich wohl in meinem Buch ein bisschen verlesen, bzw was falsch verstanden.Gruß freeG
-
l'abrad'or: Kannst du mir noch erklären was QApplication::translate macht?
-
http://doc.trolltech.com/4.6/internationalization.html
http://doc.trolltech.com/4.6/linguist-manual.htmldort und auf den Folgeseiten steht alles, was es dazu zu wissen gibt
Kurzfassung: du sorgst damit dafür, dass deine Anwendung in mehrere Sprachen übersetzt werden kann, ohne neu komplieren zu müssen