Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Speicherverwaltung von Qt-Anwendungen

  1. #1
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    59

    Question Speicherverwaltung von Qt-Anwendungen

    Soweit ich das überblicke ist es so, dass alle Child-Objekte, die dynamisch angefordert worden sind und die als Parent ein Widget (das Hauptwidget) haben, von selbst destruiert werden. Stimmt das soweit?

    Und wie ist es jetzt mit mehreren Widgets?
    Ich habe zum Beispiel in meinem Hauptwidget noch ein weiteres, dynamisches, Widget angefordert. Da kann ich als Parent aber nicht das Haupt-Widget selbst angeben, da das neue Widget sonst IN DEM Hauptwidget gezeichnet wird. Also gebe ich halt NULL an.
    Aber wird dieses Fenster dann auch von selbst destruiert, wenn das Haupt-Widget geschlossen wird? Oder muss ich es erst von selbst im Destruktor des Haupt-Widgets destruieren?

  2. #2
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    die widgets werden nur wieder destruiert wenn sie im stack erstellt worden wurden(also ohne new).

    wenn du sie mit new erstellt hast( was das normale vorgehen ist ), musst du sie auch selber im destruktor loeschen.

    gruss,

    tuxipuxi.

  3. #3
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Alle QObject mit parent werden bei Lebensende des Parent zerstört.

    Aller QObject mit Parent==0 müssen natürlich selbst zerstört werden.

    Wenn du ein Toplevel Window haben willst, das aber dem eigentlichen Hauptfenter untegeordnet sein soll, dann kannst du einen QDialog nehmen oder die entsprechenden Widget Flags setzen

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  4. #4
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    59
    @tuxipuxi:
    Naja, soweit hab ich das auch schon gewusst. ;-) =P

    @anda_skoa:
    Ich frage mich wie das realisiert wird. Es wird ja im Parent nichts über die Childs gespeichert. Oder? Es wird doch anscheinend nur in den Childs gespeichert, wer ihr Parent ist. Aber woher wissen die Childs, wann der Parent destruiert wird? Oder macht das doch der Parent? Wäre toll, wenn du mir das erklären könntest. :-)

    Ach ja. Und wenn ich in meinem Haupt-Widget-Parent-Dings-Bums (^_^) ein Child hab, das wiederum Parent eines weiteren Childs ist, dann wird das doch hoffentlich auch richtig destruiert, oder?

    Hoffe auf Antwort. ;-)
    Miles

  5. #5
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von Miles
    @anda_skoa:
    Ich frage mich wie das realisiert wird. Es wird ja im Parent nichts über die Childs gespeichert. Oder?
    Doch. Bei den Widgets muss man das ja besonders, weil Events immer auch unter Widget betreffen, zb show oder hide.


    Es wird doch anscheinend nur in den Childs gespeichert, wer ihr Parent ist. Aber woher wissen die Childs, wann der Parent destruiert wird? Oder macht das doch der Parent? Wäre toll, wenn du mir das erklären könntest. :-)
    Das Child trägt sich beim Parent zb in einer Child Liste ein (wie das bei Qt genau ist, weiß ich nicht, aber so hab ich es bei einem Projekt mal gemacht).
    Wenn du es löscht, trägt es sich wieder aus.

    Wenn der Parent gelöscht wird, iteriert er über seine Chid Liste und löscht alle Elemente.


    Ach ja. Und wenn ich in meinem Haupt-Widget-Parent-Dings-Bums (^_^) ein Child hab, das wiederum Parent eines weiteren Childs ist, dann wird das doch hoffentlich auch richtig destruiert, oder?
    Klar. Für den "Enkel" ist ja Child der Parent.
    Das geht ganz automatisch rekursiv.

    Solche Hierachien kommen praktisch eh nur bei Widgets vor, dafür dort aber sehr häufig.
    Man denke an ein Hauptfenster, das einen Dialog hat, der einen ListView hat, der ListViewItems hat.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  6. #6
    Registrierter Benutzer
    Registriert seit
    17.05.2003
    Beiträge
    59
    Aber wäre es auch ohne Probleme machbar, alle dynamisch erstellten Childs per Hand im Parent-Destruktor zu destruieren?
    Nur so eine Frage. Das sieht einfach schöner aus und ist Balsam für mein C++-Herz.

  7. #7
    Registrierter Benutzer Avatar von tuxipuxi
    Registriert seit
    30.08.2002
    Beiträge
    667
    ja,

    das geht.

  8. #8
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Aber im Destruktor wird es eh ohnehin gleich automatisch gemacht.
    Da bekommt nur leicht inkonsistenten Code.

    Temporäre Widgets löscht man natürlich schon gleich.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •