Il problema è il seguente: se l'applicazione viene chiusa mentre non sta facendo nulla attivamente, viene chiusa correttamente. Se sta lavorando attivamente su qualcosa (ad esempio, in un ciclo while), tuttavia, la finestra principale si chiuderà ma il programma continuerà ad essere eseguito in background, come confermato dall'apertura del task manager.L'app Qt resta in memoria anche dopo aver chiuso MainWindow
Ho passato una buona parte di oggi a cercare su Google il problema e implementare le possibili correzioni, ma inutilmente. Sembra che la funzione quit() semplicemente non faccia nulla. Ecco alcune cose che ho provato:
- Utilizzo di
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
. So che il segnale è attivato, perché ho provato a cambiare&app, SLOT(quit())
aqApp, SLOT(aboutQt())
e la finestra aboutQt è stata visualizzata brevemente. - Incluso
qApp->quit();
all'inizio di una funzione che viene eseguita da un pulsante della finestra principale. L'applicazione viene eseguita su quella linea, ma non ha alcun effetto. - Utilizzare
processEvents()
per assicurarsi che la GUI sia in fase di aggiornamento. - Includere istruzioni come
mainWindow.setAttribute(Qt::WA_QuitOnClose);
in main.cpp.
Voglio solo che l'applicazione esca completamente quando la finestra principale è chiusa.
Sto usando la libreria qextserialport, se questo fa alcuna differenza.
L'applicazione è multithread? – Lol4t0
Non sto creando personalmente discussioni, ma non sono sicuro che la libreria che sto usando sia. Se apro il debugger e guardo sotto thread vedrò un sacco di funzioni "ntdll! LdrFindResourceEx_U". Tuttavia, vedo solo un'istanza del mio programma nei processi del task manager. PS: Perché diavolo dovresti premere Invio per inviare il messaggio invece di creare un'interruzione di riga? – SharpHawk
Quindi il tuo thread principale potrebbe aspettare quei thread per completare il loro lavoro. Può essere fatto implicitamente, per esempio, i distruttori di oggetti possono aspettare che il thread finisca. Dovresti studiare il codice della tua biblioteca. PS 'qextserialport', per quanto ne so non crea alcun thread. – Lol4t0