문제는 다음과 같습니다. 응용 프로그램이 실제로 아무것도하지 않는 동안 닫히면 제대로 종료됩니다. 그러나 (예를 들어 while 루프에서 기다리는) 무언가에 적극적으로 작업하는 경우 주 창은 닫히지 만 작업 관리자를 열어 프로그램이 백그라운드에서 계속 실행됩니다.MainWindow가 닫힌 후에도 Qt 앱이 계속 메모리에 남아 있습니다.
저는 현재 문제를 조사하고 가능한 수정 사항을 구현하는 데 많은 시간을 보냈지만 아무 소용이 없었습니다. quit() 함수는 단순히 아무 것도하지 않는 것처럼 보입니다. 다음은 시도한 몇 가지 사항입니다.
app.connect(&app, SIGNAL(lastWindowClosed()), &app, SLOT(quit()));
을 사용합니다.&app, SLOT(quit())
을qApp, SLOT(aboutQt())
으로 변경하려고 시도 했으므로 신호가 트리거되었음을 알고 약 aboutQt 창이 잠시 나타납니다.- 주 창 단추에서 실행되는 기능의 시작 부분에
qApp->quit();
을 포함합니다. 응용 프로그램은 해당 행으로 실행되지만 효과는 없습니다. processEvents()
을 사용하여 GUI가 업데이트되고 있는지 확인하십시오.mainWindow.setAttribute(Qt::WA_QuitOnClose);
과 같은 문을 main.cpp에 포함합니다.
주 창을 닫을 때 응용 프로그램을 완전히 종료하기 만하면됩니다.
차이점이 있으면 qextserialport 라이브러리를 사용하고 있습니다.
응용 프로그램이 다중 스레드입니까? – Lol4t0
개인적으로 스레드를 만들지는 않지만 사용중인 라이브러리가 있는지 확실하지 않습니다. 디버거를 열고 스레드에서 보면 "ntdll! ldrFindResourceEx_U"함수가 많이 표시됩니다. 그래도 작업 관리자 프로세스에서 내 프로그램 인스턴스 하나만 볼 수 있습니다. 추신 : 왜 도대체 입력하면 줄 바꿈을 만드는 대신 메시지를 보내겠습니까? – SharpHawk
그러면 주 스레드가 작업을 마칠 때까지 스레드를 기다릴 수 있습니다. 암묵적으로 수행 할 수 있습니다. 예를 들어 객체의 소멸자가 스레드가 완료 될 때까지 대기 할 수 있습니다. 도서관 코드를 연구해야합니다. PS qextserialport'는 내가 아는 한 어떤 쓰레드도 생성하지 않습니다. – Lol4t0