Fenster schließt nicht bei Empfang von destroyed()

Alles rund um die Programmierung mit Qt
Antworten
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Fenster schließt nicht bei Empfang von destroyed()

Beitrag von Mister_Crac »

Hallo,

ich möchte mir eine kleine Funktion basteln, mit der ich schnell mal einen Text als ein QLabel auf dem Bildschirm ausgeben kann. Z.B. für Debugging, kurze Benachrichtigung an den Benutzer etc. Aufgerufen werden soll das ganze mit einem Einzeiler:

Code: Alles auswählen

Meldung("Dies ist die Meldung, die ausgegeben wird", this);
Und hier ist mein Code, der auch tadellos kompiliert wird:

Code: Alles auswählen

#ifndef MELDUNG_H
#define MELDUNG_H
#include <QLabel>

void Meldung(QString meldung_text, QWidget* ParentWidget)
{
	QLabel *Label = new QLabel(meldung_text);
	Label->setAttribute(Qt::WA_DeleteOnClose, true);
	QObject::connect(ParentWidget, SIGNAL(destroyed()), Label, SLOT(close()));
	Label->show();
}

#endif
Wenn man nun aber dasjenige Widget schließt, von dem aus man die Funktion Meldung() aufgerufen hat, dann bleibt die Meldung weiter bestehen. Das Label wird also nicht destruiert. Ich dachte, dass dieses WA_DeleteOnClose = true in Verbindung mit dem destroyed-Signal auf den close-Slot genau das erledigen würde. Tut es aber nicht. Wo ist mein Denkfehler?
Zandru
Beiträge: 84
Registriert: 29. Mai 2007 15:35

Beitrag von Zandru »

also eigentlich sollte das Qt::WA_DeleteOnClose reichen, das destroyed() signal wird auch erst aufgerufen, wenn das Widget wirklich zerstört wird, dein connect bringt also nix.

Läuft bei dir eine Event-Loop? Vermutlich wird deferred deletion benutzt, und ohne app.exec() passiert dann nix.
Mister_Crac
Beiträge: 28
Registriert: 10. August 2006 12:17

Beitrag von Mister_Crac »

Zandru hat geschrieben: Läuft bei dir eine Event-Loop? Vermutlich wird deferred deletion benutzt, und ohne app.exec() passiert dann nix.
Ah, siehe da:
In meiner main-Funktion fehlte eben dieses delete on close für dasjenige Widget, in dem ich Meldung() aufrufe. Jetzt geht es. Vielen Dank!
Antworten