Mi piacerebbe fare alcune cose di casa (come scrivere su un file, ecc.) In una app Qt prima che l'app esca. Come posso ottenere questa funzione (exit o qualunque cosa venga chiamata) in Qt?Come eseguire la pulizia all'uscita in Qt
risposta
È necessario collegare uno slot con il codice di pulizia al segnale QCoreApplication::aboutToQuit()
.
Questo consente di eliminare QObject con QObject::deleteLater()
e gli oggetti saranno eliminati come non avete ancora lasciato il ciclo degli eventi principale dell'applicazione.
Se si utilizza una libreria C che richiede una chiamata di 'shutdown', è possibile farlo normalmente dopo il ritorno da QCoreApplication::exec()
.
Esempio per entrambe le tecniche:
int main(int,char**)
{
QApplication app;
library_init();
QWidget window;
window.show();
QObject::connect(&app, SIGNAL(aboutToQuit()), &window, SLOT(closing()));
const int retval = app.exec();
library_close();
return retval;
}
Per quanto riguarda la risposta di Silas Parker, la documentazione Qt dice questo circa il segnale aboutToQuit
:
Il segnale è particolarmente utile se l'applicazione ha a che fare alcuni pulizia dell'ultimo secondo. Si noti che nessuna interazione dell'utente è possibile in questo stato .
Se si desidera che l'applicazione sia in grado di annullare il processo di uscire o consentire all'utente di effettuare un cambiamento dell'ultimo minuto prima della chiusura dell'applicazione, allora si può fare questo gestendo la funzione closeEvent
nel vostro MainWindow
.
void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
Vedere la documentazione closeEvent per ulteriori informazioni.
Come può essere gestito in QApplication invece di QMainWIndow? – prakashpun
@ pra16 'QApplication' non ha realmente un corollario a' closeEvent'. Potresti provare a usare ['lastWindowClosed'] (http://doc.qt.io/qt-5/qguiapplication.html#lastWindowClosed) o utilizzare la gestione dei segnali per interrompere i segnali di sospensione/chiusura. –
- 1. Come eseguire la pulizia quando l'applicazione viene uccisa in background?
- 2. Come eseguire una pulizia dopo SIGKILL?
- 3. Come posso eseguire query XPath in QT?
- 4. Eseguire un'applicazione Qt in un'altra lingua?
- 5. Come funziona la pulizia del nodo DOM in d3?
- 6. Come automatizzare la pulizia di ToolTip in UserControl
- 7. Come eseguire comandi complessi di linux in Qt?
- 8. RSpec + pulizia del database, pulizia non corretta
- 9. Come eseguire un comando di sistema in Qt?
- 10. Git: pulizia automatica?
- 11. Java oneliner per la lista di pulizia
- 12. Pulizia dell'abba sull'itinerario in partenza
- 13. Dispose() per la pulizia delle risorse gestite?
- 14. Strumento per la pulizia dei colori CSS
- 15. Userà la memoria di pulizia MarshalAs (UnmanagedType.LPWStr)?
- 16. Quando ExecuteCodeWithGuaranteedCleanup garantisce effettivamente la pulizia?
- 17. Pulizia finale nelle specifiche2
- 18. Collegamento per la pulizia del progetto in Eclipse?
- 19. Posso forzare la pulizia della memoria in C#?
- 20. Qt: impossibile eseguire '': l'operazione richiesta richiede l'elevazione
- 21. Come eseguire un comando di windows cmd utilizzando Qt?
- 22. Come eseguire applicazioni Qt 5 su altri computer (Windows 7)
- 23. jUpgrade si interrompe in "Controllo e pulizia"
- 24. Comandi di pulizia personalizzata CMake
- 25. pulizia $ _POST variabili
- 26. Pulizia dei nervosismi CSS
- 27. Pulizia della directory di build in setup.py
- 28. Pulizia HTML tramite JavaScript
- 29. Pulizia funzione Clojure
- 30. corretta pulizia del codice
Si noti che la documentazione Qt corrente consiglia specificamente di non fare nulla dopo la restituzione exec. Vedere (http://doc.qt.io/qt-5/qapplication.html#exec) –
Si noti che un riavvio dal terminale o una connessione X persa innesca a :: exit() che non emette aboutToQuit. (almeno fino al 5.7) – ManuelSchneid3r