QT: nicht-modalen dialog bei klick auf 'X' zerstören?



  • Hallo,

    ich habe in meiner anwendung einen nicht modalen dialog, der auf Knopfdruck erzeugt und angezeigt wird. Mein Problem ist nun wenn der Benutzer auf das kleien Kreuz seines Fensters klickt wird der Dialog zwar ausgeblendet aber nicht zerstört. das onClose Event kann ich zwar abfangen aber darin darf ich ihn offensichtlich auch nicht zerstören:
    QObject: Do not delete object, 'unnamed', during its event handler!

    Gibt es dafür irgendeine Lösung? Wie kann die Klasse die den Dialog erzeut hat mitbekommen, dass der Nutzer ihn schließen wollte? finsihed() wird nicht ausgesendet, da er nur versteckt wird.

    Vielen Dank für die Hilfe



  • du kannst im onClose den dialog rejecten oder ein signal emiten.



  • Qt löscht die Dinger automatisch, wenn die einen parent haben.



  • achso, ja. ich hab ungenau gelesen und dachte, er braucht ne info in der erzeugerklasse.



  • QWidget::setAttribute(Qt::WA_DeleteOnClose)

    in der Regel rate ich dir aber dazu, dem parent das deleten zu überlassen



  • Hallo und erstmal danke für die Antworten

    aMan schrieb:

    du kannst im onClose den dialog rejecten oder ein signal emiten.

    Genau das war auch meine Idee, aber die bringt mich nicht weiter. Meine Parentklasse empfängt auch das Signal, aber wie oben geschrieben kann ich dann kein delete ausführen für den Dialog, weil er sich anscheinend immernoch in seinem Eventhandler (onClose) befindet. Von allein zerstört er sich offensichtlich nicht nach dem aufruf von reject, da noch netzwerkübertragungen stattfinden (die dieser dialog die ganze zeit machen soll).

    Ponto schrieb:

    Qt löscht die Dinger automatisch, wenn die einen parent haben.

    Der Dialog hat einen parent, aber ich will ihn nicht zum Ende der Programmlaufzeit erst zerstören, sondern schon vorher, da er nicht die ganze Zeit benötigt wird.

    aMan schrieb:

    achso, ja. ich hab ungenau gelesen und dachte, er braucht ne info in der erzeugerklasse.

    Nee, war schon richtig, genau das möchte ich. Die Info ist auch nicht das Problem, aber ich darf dann im Signalhandler eben nicht machen was ich möchte.

    zwutz schrieb:

    QWidget::setAttribute(Qt::WA_DeleteOnClose)

    in der Regel rate ich dir aber dazu, dem parent das deleten zu überlassen.

    Das werd ich mal probieren, klingt gut.




Anmelden zum Antworten