2016-07-08 17 views
0

Bei der Ausführung:setQuitOnLastWindowClosed (true): Ist widget.hide() == widget.close()? den folgenden Code

int main(int argc, char **argv) { 
    QApplication application{argc, argv}; 
    application.setQuitOnLastWindowClosed(true); 

    QLabel a("a"); 
    a.setMinimumWidth(400); 
    a.show(); 

    QLabel b("b"); 
    b.setMinimumWidth(400); 
    b.show(); 

    QTimer::singleShot(10000, [&]() { b.hide(); }); 

    return application.exec(); 
} 

geschieht Folgendes:

  • Qt wird ein Fenster geöffnet "a" und ein Fenster "b"
  • Afer 10 Sekunden, verbirgt Qt Fenster „b "nach 10 Sekunden.

Wenn ich jetzt Fenster schließen „a“ von Hand, die Qt Ereignisschleife beendet wird, , obwohl es immer noch ein nicht-geschlossenen Fenster „b“ (was verborgen ist).

Warum? Sollte Qt nicht warten bis "b" geschlossen ist, nicht nur versteckt?

Antwort

2

Edit: Aus der Dokumentation auf das lastWindowClosed Ereignis:

Dieses Signal von QApplication emittiert wird :: exec(), wenn das letzte sichtbare Primärfenster (dh Fenster ohne Eltern) mit dem Qt :: Das Attribut WA_QuitOnClose ist geschlossen.

+3

Schwerpunkt auf letzte * sichtbar * ... – peppe