El problema es el siguiente: si la aplicación se cierra mientras no está haciendo nada activamente, se cierra correctamente. Sin embargo, si está trabajando activamente en algo (esperando en un ciclo while, por ejemplo), la ventana principal se cerrará pero el programa continuará ejecutándose en segundo plano, como se confirma al abrir el administrador de tareas.La aplicación Qt permanece en la memoria incluso después de que MainWindow está cerrada
He pasado una buena parte del día buscando en Google el problema y la implementación de posibles soluciones, pero fue en vano. Parece que la función quit() simplemente no hace nada. Aquí hay algunas cosas que he intentado:
- Usando
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
. Sé que la señal se disparó, porque traté de cambiar&app, SLOT(quit())
aqApp, SLOT(aboutQt())
y la ventana aboutQt apareció brevemente. - Incluyendo
qApp->quit();
al principio de una función que se ejecuta desde el botón de una ventana principal. La aplicación se ejecuta en esa línea, pero no tiene ningún efecto. - Usando
processEvents()
para asegurarse de que la GUI se está actualizando. - Incluyendo declaraciones como
mainWindow.setAttribute(Qt::WA_QuitOnClose);
en main.cpp.
Solo quiero que la aplicación salga por completo cuando se cierre la ventana principal.
Estoy usando la biblioteca qextserialport, si eso hace alguna diferencia.
¿Su aplicación es multihilo? – Lol4t0
No estoy creando subprocesos personalmente, pero no estoy seguro de si la biblioteca que estoy usando es. Si abro el depurador y miro debajo de los hilos, veré un montón de funciones "ntdll! LdrFindResourceEx_U". Sin embargo, solo veo una instancia de mi programa en los procesos del administrador de tareas. PD: ¿Por qué demonios presionar ingresar enviaría el mensaje en lugar de crear un salto de línea? – SharpHawk
Entonces su hilo principal puede esperar esos hilos para terminar su trabajo. Se puede hacer implícitamente, por ejemplo, los destructores de objetos pueden esperar a que termine el hilo. Debes estudiar tu código de biblioteca. PS 'qextserialport', hasta donde yo sé, no crea ningún hilo. – Lol4t0