2016-05-27 15 views
0

Ich habe ein Hauptfenster, das einen QDialog erstellt (der Name ist qds), wenn ich eine Taste drücke. Wenn ich das Hauptfenster schließe, möchte ich, dass QDialog ebenfalls geschlossen ist. Aber wenn ich das Hauptfenster schließe, ist QDialog immer noch geöffnet und die Anwendung läuft noch. Dies ist der Destruktor Hauptfenster:Schließen von QDialog aus dem Hauptfenster

MainWindow::~MainWindow(){ 
    if(qds) delete qds; // this is the QDialog 
    // ...other code 
} 

qds ist Kinder nicht Hauptfenster. Ich habe versucht, mit setzen

setAttribute(Qt::WA_DeleteOnClose); 

in Hauptfenster Konstruktor, aber es erzeugt Segmentierung Faul (Doppel frei).

+0

Haben Sie 'delete qds;' im 'setAttribute (Qt :: WA_DeleteOnClose); 'case gelöscht? – LogicStuff

+0

@LogicStuff yeah, aber es ist das gleiche – CodeBott

+0

Könnten Sie bitte den Code zeigen, wie Sie den Dialog erstellen? – demonplus

Antwort

3

Der nicht-modale Dialog wird gestartet und der Zeiger befindet sich im Hauptfenster Objekt. Es verhindert, dass die App beim Schließen des Hauptfensters beendet wird. Wie behebt man das?

Die Anwendungsereignisschleife sollte nicht mehr Objekte haben, die sich "drehen", und das löst das Problem. Ich rufe alle Widgets auf, die das andere Widget nicht haben 'dieser' Zeiger wird über den Konstruktor 'detached' übergeben. Aber wir können sie immer noch verfolgen. Ich benutze Listen von 'detached' Widgets, aber mit nur einem 'detached' -Dialog reicht der Zeiger der Klassenvariablen.

void MainWindow::closeEvent(QCloseEvent *event) 
{ 
    // TODO: also make sure m_pDetachedNonmodalDlg set to null 
    //  when the dialog closed on its own and deleted: see 
    //  QObject::destroyed() signal for that or make it like 
    //  QPointer<QWidget> m_pDetachedWidget 
    if (m_pDetachedNonmodalDlg) 
     m_pDetachedNonmodalDlg->close(); 

    // or event->accept(); but fine 'moments' are there 
    QMainWindow::closeEvent(event); 
} 
+0

Yeah, du hast recht, es funktioniert! Vielen Dank. – CodeBott

+0

Gut, dass funktioniert, Sie können die Antwort auch akzeptieren. – AlexanderVX

Verwandte Themen