[gelöst]mainwindow schliessen -> debugwindow auch schlies

Verschiedenes zu Qt
Antworten
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

[gelöst]mainwindow schliessen -> debugwindow auch schlies

Beitrag von kater »

Hallo und sry, ich muss diese Frage nocheinmal stellen. Ich habe ein normales QT GUI Projekt im QtCreator erstellt, also ein MainWindow, und ein DebugWindow was einfach nur Textausgaben enthält. Beendet man nun das Programm mit quit() soll, das Debugwindow auch zu gehn. Tut es aber nicht.

Ich sitzt jetzt schon 2h dran, und die Frage wurde auch schon so oft gestellt.. aber ich finde keine passende Antwort.

Dem Debugwindow kann ich das Mainwindow leider auch nicht als parent mitgebenen, da die beiden sonst ineinander gezeichnet werden. Es also keine 2 getrennten Fenster gibt. Vllt. weis da jemand eine Lösung. Das würde das Problem bestimmt auch lösen.

Ich könnte vllt. noch MainWindow::quit() ueberladen um darin ein delete debugwindow; zu machen. Also die Methode von Hand. Hm...

Hier noch der Code

Code: Alles auswählen

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow),
    debugwindow(0)
{
    ui->setupUi(this);

    debugwindow = new DebugWindow();
}

class DebugWindow : public QWidget
{
    Q_OBJECT
    // Functions
public:
    explicit DebugWindow(QWidget *parent = 0);
    ~DebugWindow();

private:
private slots:
    void on_pushButton_Save_clicked();


    // Members
public:
private:
    Ui::DebugWindow *ui;

};
Fehlt da irgendwo noch ein connect() mit quit() und close() oder sonstwas? Hab schon so viel probiert, bekomm es nicht hin. Dabei ist das Problem total einfach :/
Zuletzt geändert von kater am 27. Februar 2011 17:31, insgesamt 1-mal geändert.
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

MainWindow::closeEvent -> darin ein qApp->quit().
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Ich bin höcht erfreut ^^ Großen Dank!

Ich kenn alles. qApp quit() closeEvent() nur in dieser Kombination nicht :)
Herzogswalder
Beiträge: 79
Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden

Beitrag von Herzogswalder »

Ich würde es so machen:

Code: Alles auswählen

MainWindow::~MainWindow()
{
        debugwindow->close();
        delete debugwindow;
}
So wird der vom DebugWindow belegte Speicher auch freigegeben, schließlich hat es kein Parent.
Gruß, Herzogswalder
Qt 4.8, OS X Mountain Lion
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Ich würde einiges anders machen :P
debugwindow nicht als Pointer anlegen.
Wenn für Pointer eh schon die Initialisierungsliste verwendet wird, nicht mit 0 initialisieren, sondern gleich mit nem ordentlichen Wert.

Und wenn die Applikation terminiert, wird sowieso vom Betriebssystem alles sauber gemacht, da entsteht kein Memory-Leak.
Schöner Stil ist es aber nicht. Man sollte sich angewöhnen, alles wieder selber aufzuräumen, nicht dass dann am Ende wichtige Daten nicht mehr gesichert werden, oder sonstige unschöne Nebeneffekte eintreten.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

@Herzogswalder geht nicht. Der desconstruktor von MainWindow wird erst aufgerufen, wenn das Debugwindow auch geschlossen ist.

@franzf ganz am Anfang war es auch kein Pointer. Aber wie gesagt, ich hab viel viel viiieell rumprobiert.
Herzogswalder
Beiträge: 79
Registriert: 11. Oktober 2009 00:37
Wohnort: Dresden

Beitrag von Herzogswalder »

Dann lässt du eben das

Code: Alles auswählen

debugwindow.close();
weg.
Gruß, Herzogswalder
Qt 4.8, OS X Mountain Lion
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag von kater »

Ja aber dann ists debugwindow immernoch offen? Ist doch ok jetzt so wie es geht. Besser als ein delete this; in ~debugwindow() ;)
Antworten